可选的Nullable当map返回null时执行orElse

时间:2018-12-22 06:19:27

标签: java java-8 optional

我写了一个简单的代码段

String aa = "aa";
String aaa = null;

String result = Optional.ofNullable(aa)
                        .map(s -> aaa)
                        .orElse("bb");

System.out.println(result);

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

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

2 个答案:

答案 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的结果。