for*_*hun 0 java lambda function optional
我在玩 Java 的 Optional 并认为它就像一个 if else 块。但是在下面的代码中,即使name变量不是执行块null的内容orElse。有什么解释吗?
import java.util.Optional;
class Scratch {
public static void main(String[] args) {
String name = "some text";
System.out.println(
Optional.ofNullable(name)
.map(n -> mapped())
.orElse(getOrElse()));
}
static String mapped(){
System.out.println("mapped -- block executed");
return "mapped";
}
static String getOrElse(){
System.out.println("orElse -- block executed");
return "orElse";
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
mapped -- block executed
orElse -- block executed
mapped
Run Code Online (Sandbox Code Playgroud)
仔细看看Optional.orElse(T)。它需要一个值将提供给该调用哪个需求,但该值将只返回在其他情况下。SogetOrElse()将被执行以在任何情况下获取该值。
Optional.orElse(T) 通常与已经存在的值一起使用,例如: map(e -> mapped()).orElse("not found")
如果你想使用一个只会在 else 情况下被调用的函数,你需要Optional.orElseGet(Supplier<? extends T>)像这样使用:(map(e -> mapped).orElseGet(Scratch::getOrElse)或orElseGet(() -> getOrElse()))。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |