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

java可选:一种不必执行嵌套ifPresent()的好方法,java,java-8,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 se

我经常要做以下事情

// 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;
}
//某种方法
公共T布拉(){
可选的oneOp=getFromSomething();
if(oneOp.isPresent()){
可选的secondOp=getFromSomethingElse(oneOp.get())
if(secondOp.isPresent()){
返回secondOp.get()
}
}
返回默认值;
}
继续检查ifPresent()相当麻烦,好像我又开始执行空检查了一样,如果存在,将使用提供的
函数
用另一个
可选
替换
可选

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

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

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

在这里,我还将对
getFromSomethingElse
的调用转换为一个方法引用,该方法引用将匹配
flatMap
所需的
函数

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

试试“flatMap”和“orElse”。