地图

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