什么是java.util.OptionalDouble?
OptionalDouble 该类是在java8中引入的。
它是双倍值的可选容器,可能包含空或非空的值。如果双倍值存在,isPresent() 方法返回真,getAsDouble() 方法返回双倍值。
OptionalDouble是Optional 类的一个原始双倍版本,而Optional是双倍对象的一个Optional类。
这是一个使用isPresent(),getAsDouble(),orElse() 和Lambda expressions 的例子。
- 使用静态的of()方法创建OptionalDouble。
- 使用
isPresent()方法检查双倍值是否存在。 getAsDouble()方法从一个对象中返回双倍值。orElse()如果存在则返回值,如果不存在则返回其他值。ifPresent()如果值存在的话,方法需要DoubleConsumer,否则什么都没有。- 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 }}
The output of the above code execution is
```markup
true
12.0
12.0
12.0
12.0
如何在java中把Double转换为OptionalDouble?
OptionalDouble of() 该方法用于创建OptionalDouble ,其值为非空。
语法是
public static OptionalDouble of(double value)
这个方法接收双倍值作为输入并返回OptionalDouble对象。
import java.util.OptionalDouble;
public class Test {
public static void main(String[] args) {
double doubleValue = 14.3;
OptionalDouble optionDouble = OptionalDouble.of(doubleValue);
System.out.println(optionDouble.isPresent()); // returns true
}
}
如何将OptionalDouble转换为java8中的double?
getAsDouble() 方法用于从 到双倍值的转换。OptionalDouble
import java.util.OptionalDouble;
public class Test {
public static void main(String[] args) {
double doubleValue=0;
OptionalDouble optionDouble = OptionalDouble.of(37.8);
if(optionDouble.isPresent()) {
doubleValue=optionDouble.getAsDouble();
}
System.out.println(doubleValue);
}
}
使用OptionalDouble查找一个数组的平均数示例
这是一个在java8中查找数组平均值的例子。
IntStream 是一个用于处理原始数的顺序类,支持并行聚合操作。
它有average() ,返回OptionalDouble 类。下面的例子使用了OptionalDouble.isPresent 和getAsDouble 方法的用法a与lambda表达式。
import java.util.Arrays;
import java.util.OptionalDouble;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class Test {
public static void main(String[] args) {
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() 方法返回双倍primitive 值
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中出现了值,则返回值,否则供应商被调用并抛出一个错误。 |
总结
在本教程中,我们了解了java中的OptionalDouble类。
- 多个转换实例
- 在java8中OptionalDouble和Optional之间的区别
- 可选双数的方法