Pat*_*tan 5 java java-8 option-type
我写了一个简单的片段
String aa = "aa";
String aaa = null;
String result = Optional.ofNullable(aa)
.map(s -> aaa)
.orElse("bb");
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
orElse
aa
当为空时执行。map
但当返回 null 时它也会被执行。
我的理解是,orElse
只会被执行aa
为空。但即使map返回null也会执行吗?
我的理解是只有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
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果在mapper
您的情况下应用 ie s -> aaa
returns null
,则map
操作将返回Optional.empty
,然后进行orElse
分支。