地圖
使用 Optional
的 map()
方法處理可能是 null
的值而不進行明確的 null
檢查:
(請注意, map()
和 filter()
操作會立即進行評估,不像它們的 Stream 對應物,它們僅在終端操作時進行評估。)
句法:
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
程式碼示例:
String value = null;
return Optional.ofNullable(value).map(String::toUpperCase).orElse("NONE");
// returns "NONE"
String value = "something";
return Optional.ofNullable(value).map(String::toUpperCase).orElse("NONE");
// returns "SOMETHING"
因為 Optional.map()
在其對映函式返回 null 時返回一個空的可選項,所以你可以將多個 map()
操作連結為一種空安全解除引用的形式。這也稱為 Null-safe 連結。
請考慮以下示例:
String value = foo.getBar().getBaz().toString();
getBar
,getBaz
和 toString
中的任何一個都可以投擲一個 NullPointerException
。
以下是使用 Optional
從 toString()
獲取值的另一種方法:
String value = Optional.ofNullable(foo)
.map(Foo::getBar)
.map(Bar::getBaz)
.map(Baz::toString)
.orElse("");
如果任何對映函式返回 null,則返回空字串。
下面是另一個例子,但略有不同。僅當沒有任何對映函式返回 null 時,它才會列印該值。
Optional.ofNullable(foo)
.map(Foo::getBar)
.map(Bar::getBaz)
.map(Baz::toString)
.ifPresent(System.out::println);