Kar*_*ick 7 java optional java-8
小片1:
Optional.of(s).map(str -> str).orElse("");
Run Code Online (Sandbox Code Playgroud)
摘录2:
Optional.of(s).map(str -> str).orElse(Optional.empty());
Run Code Online (Sandbox Code Playgroud)
代码段3:
Optional.of(s).map(str -> Optional.of(str)).orElse("hello");
Run Code Online (Sandbox Code Playgroud)
Snippet 1正在编制罚款,但Snippet 2与Snippet 3同类型不兼容的错误编译.虽然这是很好的,Snippet 2和Snippet 3失败,我不明白他们是如何评价.换句话说,我认为我在lambdas本身被链接/调用方面缺少一些基础知识.如果有人能提供帮助,我将不胜
Ous*_* D. 11
小片1:
Optional.of(s).map(str -> str).orElse("");
Run Code Online (Sandbox Code Playgroud)
编译因为提供的默认值与包含的值相同,即a .orElse OptionalString
摘录2:
Optional.of(s).map(str -> str).orElse(Optional.empty());
Run Code Online (Sandbox Code Playgroud)
不编译,因为map你有一个Optional<String>但后来你提供了一个Optional<String>,orElse而它应该是一个String.
代码段3:
Optional.of(s).map(str -> Optional.of(str)).orElse("hello");
Run Code Online (Sandbox Code Playgroud)
不编译,因为map你有一个,Optional<Optional<String>>但你传递的String,orElse而它应该是一个Optional<String>.
总结orElse被宣告为:
公共T orElse(T其他)
并记录为:
返回值(如果存在),否则返回其他值.
即orElse基本上说"给我可选包含的值,否则采用默认值"以及T必须与Optional包含的值相同的类型.
所以,如果你有Optional<String,那么你必须提供一个String到 orElse,如果你有Optional<Integer,那么你必须提供一个Integer以 orElse等...
另外,map第一个和第二个示例代码段中的函数是多余的,因此您可以完全省略它.
每当你看到你的自我调用Optional#map函数,因为v -> v它可能不需要.