地圖

使用 Optionalmap() 方法處理可能是 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();

getBargetBaztoString 中的任何一個都可以投擲一個 NullPointerException

以下是使用 OptionaltoString() 獲取值的另一種方法:

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