地图

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