地圖
使用 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);