一.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实例,否则创建空实例。(ofNullable
是of
和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
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());//输出:小黑
作者:Mr_欢先生
链接:https://www.jianshu.com/p/5d399aae6fd9