我写了一个简单的代码段
String aa = "aa";
String aaa = null;
String result = Optional.ofNullable(aa)
.map(s -> aaa)
.orElse("bb");
System.out.println(result);
orElse
在aa
为空时执行。但是,当map
也返回null时,它将被执行。
我的理解是,只有orElse
为空,才会执行aa
。但是即使map返回null也会执行吗?
答案 0 :(得分:2)
我的理解是,只有aa为null时才会执行orElse。但 即使map返回null也会执行吗?
Optional.map
函数本身的实现可以更好地解释这一点:
// return type function to map
public <U> Optional<U> map(Function<? super T, ? extends U> mapper) {
Objects.requireNonNull(mapper); // null check
if (!isPresent()) {
return empty(); // could be true when 'aa' is null in your case
} else {
return Optional.ofNullable(mapper.apply(value)); // using Optional.ofNullable itself
}
}
因此,如果应用mapper
即在您的情况下s -> aaa
返回null
,则map
操作将返回Optional.empty
,后跟{{1} }分支。
答案 1 :(得分:2)
我不得不不同意接受的答案来查看实现,这里只有文档是事实的源头。在您的情况下,这很简单,您正在执行(基本上映射为null
)
.map(s -> aaa)
医生说:
如果存在值,则对它应用提供的映射函数,,如果结果为非null ,则返回描述结果的Optional。否则,返回一个空的Optional。
在您的情况下,应用map
操作的结果为null,因此部分否则返回空Optional ,因此您看到的是orElse
的结果。