Optional.flatMap 和 Optional.map 之间有什么区别?
这两种方法之间有什么区别:和 ?Optional.flatMap()
Optional.map()
如能提供一个例子,将不胜感激。
这两种方法之间有什么区别:和 ?Optional.flatMap()
Optional.map()
如能提供一个例子,将不胜感激。
如果函数返回您需要的对象或函数返回 .例如:map
flatMap
Optional
public static void main(String[] args) {
Optional<String> s = Optional.of("input");
System.out.println(s.map(Test::getOutput));
System.out.println(s.flatMap(Test::getOutputOpt));
}
static String getOutput(String input) {
return input == null ? null : "output for " + input;
}
static Optional<String> getOutputOpt(String input) {
return input == null ? Optional.empty() : Optional.of("output for " + input);
}
两个 print 语句打印相同的内容。
它们都从可选类型中获取一个函数。
map()
在可选功能上应用“按原样”功能:
if (optional.isEmpty()) return Optional.empty();
else return Optional.of(f(optional.get()));
如果您的函数是 来自 的函数,会发生什么情况?
您的结果现在是 !T -> Optional<U>
Optional<Optional<U>>
这就是意义所在:如果你的函数已经返回一个,则更聪明一些,并且不会对其进行双重包装,则返回。flatMap()
Optional
flatMap()
Optional<U>
它是两个功能性习语的组合:和。map
flatten