5.Java8新特性 - Optional容器类

作者: Mr_欢先生 | 来源:发表于2018-11-03 11:50 被阅读28次

    一.Optional简介

    Optional是一个容器类,代表一个值存在或者不存在,可以避免空指针异常

    二.常用方法

    //一个实体类
    public class User {
        private String name;
        private int age;
        private String sex;
    
        public User(String name, int age, String sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
    
        public User() {
        }
        //......省略get/set方法、toString方法....
    }
    
    作者:Mr_欢先生
    链接:https://www.jianshu.com/p/c57ac950b3e0
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    
    • of(T t):创建一个Optional实例
    Optional<User> optionalUser = Optional.of(new User());
    User user = optionalUser.get();
    System.out.println(user);
    //输出:User{name='null', age=0, sex='null'}
    
    • empty():创建一个空的Optional实例

    创建了一个空的optional,如果要打印optional.get()则出现java.util.NoSuchElementException: No value present异常

     Optional<User> optional = Optional.empty();
    
    • ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例。(ofNullableofempty两个的功能结合体)
    Optional<User> optional = Optional.ofNullable(new User());
    System.out.println(optional.get());
    // 输出:User{name='null', age=0, sex='null'}
    Optional<User> optional1 = Optional.ofNullable(null);
    System.out.println(optional1.get());
    // 出现异常信息:java.util.NoSuchElementException: No value present
    
    • isPresent :判断是否包含值
    Optional<User> optional = Optional.ofNullable(null);
    if (optional.isPresent()) {
        System.out.println(optional.get());
    }
    //第二种写法
    optional.ifPresent(System.out::println);
    //输出:不输出任何结果
    
    • orElse(T t):如果调用对象包含值,返回该值,否者返回t
    Optional<User> optional = Optional.empty();
    User user = optional.orElse(new User("小明", 12, "男"));
    System.out.println(user);
    // 输出:User{name='小明', age=12, sex='男'}
    
    • orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值
    Optional<User> optional = Optional.empty();
    User user = optional.orElseGet(() -> new User("小黑", 8, "男"));
    System.out.println(user);
    //输出:User{name='小黑', age=8, sex='男'}
    
    • map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()
    Optional<User> optional = Optional.of(new User("小黑", 8, "男"));
    Optional<String> optionalStr = optional.map(User::getName);
    System.out.println(optionalStr.get());
    //输出:小黑
    
    • flatMap(Function mapper):与map类似,要求返回值必须是Optional
    Optional<User> optional = Optional.of(new User("小黑", 8, "男"));
    Optional<String> optionalStr = optional.flatMap(item -> Optional.of(item.getName()));
    System.out.println(optionalStr.get());
    //输出:小黑
    

    相关文章

      网友评论

        本文标题:5.Java8新特性 - Optional容器类

        本文链接:https://www.haomeiwen.com/subject/khuntqtx.html