java - Optional Of Nullable 当 map 返回 null 时执行 orElse

标签 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);

orElse 应在aa 为空时执行。但是当 map 返回 null 时它也会被执行。

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

最佳答案

My understanding is that orElse will be executed only aa is null. But will it be executed even when map return 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 后跟 orElse 分支。

关于java - Optional Of Nullable 当 map 返回 null 时执行 orElse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53893496/

相关文章:

java - 打包jar无效聚合器项目需要pom作为打包

java - Thymeleaf 隐藏标签 :text ="#{var}"

lambda - 收集后获取java8上的索引

java - 使用流 API 搜索列表中的值并保持搜索位置(标准化测量数据)

C#方法第二个参数可选

Java 8 - Optional<CustomizedObject> 获取 CustomizedObject 中列表的第一个元素

java - 在客户端使用 RMI 远程对象的正确方法是什么?

java - 为什么 Groovy 编译器显然会生成 1.5 版本的 Java?

Java 8 通用函数映射

java - Apache Spark 使用 Java 加入示例