java.util.OptionalDouble
在java8中引入了OptionalDouble类。如果双倍值存在,isPresent()方法会返回true,getAsDouble()方法会返回双倍值。
OptionalDouble是Optional类的一个原始双倍版本,而Optional是双倍对象的一个Optional类。
OptionalDouble 示例
这是一个isPresent(), getAsDouble(), orElse()和Lamda表达式的使用 例子。
import java.util.OptionalDouble;
public class OptionalDoubleDemo {
public static void main(String[] args) {
OptionalDouble optionalDouble = OptionalDouble.of(12.0);
System.out.println(optionalDouble.isPresent()); // true
System.out.println(optionalDouble.getAsDouble()); //12.0
System.out.println(optionalDouble.orElse(12.0));//12.0
optionalDouble.ifPresent(System.out::println);//12.0
optionalDouble.ifPresent((value) -> System.out.println(value));//12.0
}
}
在java8中如何将Double转换为OptionalDouble?
OptionalDouble.of()方法用于创建非空值的OptionalDouble。
语法是
public static OptionalDouble of(double value)
这个方法接收 double Value 作为输入并返回 OptionalDouble 对象。
double doubleValue = 14.3;
OptionalDouble optionDouble = OptionalDouble.of(doubleValue);
System.out.println(optionDouble.isPresent()); // returns true
在java8中如何将OptionalDouble转换为Double?
OptionalDouble.getAsDouble()方法被用来转换为双倍值。
OptionalDouble optionDouble = OptionalDouble.of(37.8);
if(optionDouble.isPresent()) {
doubleValue=optionDouble.getAsDouble();
}
System.out.println(doubleValue);
使用OptionalDouble的IntStream平均数例子
这是一个在java8中寻找数组平均数的例子。
IntStream是一个用于处理原始数的顺序类,支持并行聚合操作。它有average(),返回OptionalDouble类。下面的例子使用了OptionalDouble.isPresent和getAsDouble方法的用法,并带有lambda表达式。
Integer[] numbersArray = {1,2,3,4,5,6,7};
Stream streamIntegers = Arrays.stream(numbersArray);
IntStream intStreamNumber = streamIntegers.mapToInt(value -> value);
OptionalDouble numberAverage = intStreamNumber.average();
System.out.println(numberAverage.isPresent() ?
"Numbers Average = " + numberAverage.getAsDouble() :
"Empty Array");
在java8中OptionalDouble和Optional之间的区别?
Optional.get()方法返回Double对象
OptionalDouble.getAsDouble()方法返回双倍原始值
DoubleStream和OptionalDouble对象的双倍值可能会导致nullpointerexception
Optional和Stream为双倍值添加了额外的封装以避免null异常。
方法
一个可选的双数类有许多实用的方法来测试值是否可用。
方法-描述
empty():
创建空的可选双倍数实例
getAsDouble():
如果OptionDouble中存在双倍值,则返回双倍值,否则出现NoSuchElementException。
ifPresent(DoubleConsumer consumer):
执行DoubleConsumer,如果值存在于OptionDouble中,否则什么都不做
isPresent():
如果值存在于OptionDouble中,返回真,否则返回假
of(Double double):
创建具有非空值的OptionalDouble,如果传入空值,则抛出NullPointerException,OptionDouble对象将不会被初始化。
orElse(double other):
如果在OptionalDouble中没有显示值,返回默认值。
orElseGet(DoubleSupplier other):
如果值出现在OptionalDouble中,则返回值,否则供应商被调用,结果将被返回。
orElseThrow(Supplier exceptionSupplier):
如果在OptionalDouble中出现了值,则返回值,否则供应商被调用并抛出一个错误。