java可选:一种无需嵌套ifPresent()的好方法

时间:2019-03-01 18:14:22

标签: java java-8

我经常不得不做以下事情

// some method
public T blah() {
    Optional<T> oneOp = getFromSomething();
    if (oneOp.isPresent()) {
        Optional<T> secondOp = getFromSomethingElse(oneOp.get())
        if (secondOp.isPresent()) {
            return secondOp.get()
        }
    }
    return DEFAULT_VALUE;
}

继续检查ifPresent()很麻烦,就像我要返回空检查一样

1 个答案:

答案 0 :(得分:12)

使用the flatMap method,它将使用提供的OptionalOptional替换为另一个Function

  

如果存在值,则返回将给定的Optional-轴承映射函数应用于该值的结果,否则返回空的Optional

然后,您可以使用orElse,如果存在的话,它将返回您提供的值或默认值。

  

如果存在值,则返回该值,否则返回other

在这里,我还将对getFromSomethingElse的调用转换为与Function所需的flatMap匹配的方法引用。

public T blah() {
    return getFromSomething().flatMap(this::getFromSomethingElse).orElse(DEFAULT_VALUE);
}