FlatMap
flatMap
类似于 map
。javadoc 描述的差异如下:
这个方法类似于
map(Function)
,但提供的映射器是一个结果已经是Optional
的映射器,如果被调用,flatMap
不会用额外的Optional
包装它。
换句话说,当你链接一个返回 Optional
的方法调用时,使用 Optional.flatMap
可以避免创建嵌套的 Optionals
。
例如,给定以下类:
public class Foo {
Optional<Bar> getBar(){
return Optional.of(new Bar());
}
}
public class Bar {
}
如果你使用 Optional.map
,你会得到一个嵌套的 Optional
; 即 Optional<Optional<Bar>>
。
Optional<Optional<Bar>> nestedOptionalBar =
Optional.of(new Foo())
.map(Foo::getBar);
但是,如果你使用 Optional.flatMap
,你会得到一个简单的 Optional
; 即 Optional<Bar>
。
Optional<Bar> optionalBar =
Optional.of(new Foo())
.flatMap(Foo::getBar);