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