Optional类:Optional<T> 类是一个容器类,代表一个值存在或者不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念,并且可以避免空指针异常。
Optional常用方法:
- Optional.of(T t):创建一个Optional实例
- Optional.empty():创建一个空的Optional实例
- Optional.ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例
- isPresent():判断是否包含值
- orElse(T t):如果调用对象包含值,返回该值,否则返回t
- orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值
- map(Function f):如果有值进行处理,并返回处理后的Optional,否则返回Optional.empty()
- flatMap(Function mapper):与map类似,要求返回值必须是Optional
Optional 的使用:
public static class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}public static void main(String[] args) {User user = null;// 创建 Optional 对象Optional<User> userOptional = Optional.ofNullable(user);/* 从 Optional 中获取对象 */// 1.存在即返回,否则提供默认值userOptional.orElse(new User());// 2.存在即返回,否则由函数产生userOptional.orElseGet(User::new);// 3.存在即返回,否则抛出异常userOptional.orElseThrow(RuntimeException::new);/* 存在采取做相应的处理 */userOptional.ifPresent(System.out::println);/* map 可以对 Optional 中的对象执行某种操作,且会返回一个 Optional 对象 */// map 常用来与 orElse 系列方法组合提供默认值userOptional.map(User::getName).orElse("");// 由于 map 返回是一个 Optional 对象,因此,支持map的级联userOptional.map(User::getName).map(String::toLowerCase).orElseGet(String::new);}
