java可选:不必执行嵌套ifPresent()的好方法

eal*_*eon 4 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;
}
Run Code Online (Sandbox Code Playgroud)

继续检查ifPresent()就好像我回到做空检查一样非常麻烦

rge*_*man 12

如果存在,使用提供flatMap方法替换Optional另一个Optional方法Function.

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

然后,您可以使用orElse该值(如果存在)返回值或您提供的默认值.

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

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

public T blah() {
    return getFromSomething().flatMap(this::getFromSomethingElse).orElse(DEFAULT_VALUE);
}
Run Code Online (Sandbox Code Playgroud)