Optional类中map和flatMap的区别


转自:

http://www.java265.com/JavaCourse/202206/3666.html

Optional是一个容器对象, 可以包含也可以不包含非null值。 Optional在Java 8中引入,目的是解决  NullPointerExceptions的问题。 本质上,Optional是一个包装器类,其中包含对其他对象的引用。 在这种情况下,对象只是指向内存位置的指针,并且也可以指向任何内容。 从其它角度看,Optional提供一种类型级解决方案来表示可选值而不是空引用

下文笔者讲述Optional类中map和flatMap的区别说明,如下所示

 map和flatMap的区别
   map方法:接受一个映射函数参数,返回一个被Optional包装的结果。若结果为空,则返回 空Optional
   flatMap方法:接受一个返回值为Optional的映射函数参数,该返回值亦是flatMap方法的返回值
     若结果为空,则返回 空Optional。
    public class User {
        String name;
        Integer age;
        public User(){
 
        }
        public User(String name, Integer age){
            this.name = name;
            this.age = age;
        }
        ... // getter setter
       
    } 

    @Test
    void mapOptionalTest(){
        User user = new User("java265.com",88);
        Optional> optionalOptional = Optional.ofNullable(user).map(this::getName);
        Optional mapOptional = Optional.ofNullable(user).map(s -> s.getName());
        Optional flatOptional = Optional.ofNullable(user).flatMap(this::getName);

    }
 
    private Optional getName(User user){
        return Optional.ofNullable(user).map(s -> s.getName());
    }