当map返回null时执行orElse

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)

orElseaa当为空时执行。map但当返回 null 时它也会被执行。

我的理解是,orElse只会被执行aa为空。但即使map返回null也会执行吗?

Nam*_*man 5

我的理解是只有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 -> aaareturns null,则map操作将返回Optional.empty,然后进行orElse分支。

  • @nullpointer 顺便说一句,实现不是事实的来源,只有文档才是;实施可以随时自由更改...... (2认同)