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);
}