Java8 - OptionalDouble类示例

748 阅读2分钟

java8 - Top 10 Optional Class Examples

什么是java.util.OptionalDouble?

OptionalDouble 该类是在java8中引入的。

它是双倍值的可选容器,可能包含空或非空的值。如果双倍值存在,isPresent() 方法返回真,getAsDouble() 方法返回双倍值。

OptionalDoubleOptional 类的一个原始双倍版本,而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.isPresentgetAsDouble 方法的用法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
DoubleStreamOptionalDouble 双倍值的对象可能会导致nullpointerexception
OptionalStream 为双倍值添加了额外的封装,以避免出现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之间的区别
  • 可选双数的方法