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