程序员JavaEE 学习专题程序员干货

5.Java8新特性 - Optional容器类

2018-11-03  本文已影响28人  Mr_欢先生

一.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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Optional<User> optionalUser = Optional.of(new User());
User user = optionalUser.get();
System.out.println(user);
//输出:User{name='null', age=0, sex='null'}

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

 Optional<User> optional = Optional.empty();
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
Optional<User> optional = Optional.ofNullable(null);
if (optional.isPresent()) {
    System.out.println(optional.get());
}
//第二种写法
optional.ifPresent(System.out::println);
//输出:不输出任何结果
Optional<User> optional = Optional.empty();
User user = optional.orElse(new User("小明", 12, "男"));
System.out.println(user);
// 输出:User{name='小明', age=12, sex='男'}
Optional<User> optional = Optional.empty();
User user = optional.orElseGet(() -> new User("小黑", 8, "男"));
System.out.println(user);
//输出:User{name='小黑', age=8, sex='男'}
Optional<User> optional = Optional.of(new User("小黑", 8, "男"));
Optional<String> optionalStr = optional.map(User::getName);
System.out.println(optionalStr.get());
//输出:小黑
Optional<User> optional = Optional.of(new User("小黑", 8, "男"));
Optional<String> optionalStr = optional.flatMap(item -> Optional.of(item.getName()));
System.out.println(optionalStr.get());
//输出:小黑
上一篇下一篇

猜你喜欢

热点阅读