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);