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