Java8 - OptionalDouble类示例

661 阅读2分钟

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中出现了值,则返回值,否则供应商被调用并抛出一个错误。