1:Optional 1.1 概述
Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException),提供了一些的方法代替过去的if-else处理逻辑,并与Stream流结合提供一致性的函数式编程.
注意: Optional 不支持Java本身提供的序列化与反序列化机制,也就是RPC不能使用Java提供的序列化机制
1.2 方法概览 序号
方法
方法说明1 private Optional() 无参构造,构造一个空Optional
2 private Optional(T value) 根据传入的非空value构建Optional
3 public static<T> Optional<T> empty() 返回一个空的Optional,该实例的value为空
4 public static <T> Optional<T> of(T value) 根据传入的非空value构建Optional,与Optional(T value)方法作用相同
5 public static <T> Optional<T> ofNullable(T value)
与of(T value)方法不同的是,ofNullable(T value)允许你传入一个空的value,
当传入的是空值时其创建一个空Optional,当传入的value非空时,与of()作用相同
6 public T get() 返回Optional的值,如果容器为空,则抛出NoSuchElementException异常
7 public boolean isPresent() 判断当家Optional是否已设置了值
8 public void ifPresent(Consumer<? super T> consumer) 判断当家Optional是否已设置了值,如果有值,则调用Consumer函数式接口进行处理
9 public Optional<T> filter(Predicate<? super T> predicate) 如果设置了值,且满足Predicate的判断条件,则返回该Optional,否则返回一个空的Optional
10 public<U> Optional<U> map(Function<? super T, ? extends U> mapper)
如果Optional设置了value,则调用Function对值进行处理,并返回包含处理后值的Optional,否则返回空Optional
11 public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) 与map()方法类型,不同的是它的mapper结果已经是一个Optional,不需要再对结果进行包装
12 public T orElse(T other) 如果Optional值不为空,则返回该值,否则返回other
13 public T orElseGet(Supplier<? extends T> other) 如果Optional值不为空,则返回该值,否则根据other另外生成一个
14 public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
throws X 如果Optional值不为空,则返回该值,否则通过supplier抛出一个异常
15 public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier) 如果Optional值不为空,则返回该值,否则通过Optional.重新构造一个值
16 public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) 判断当家Optional是否已设置了值,如果有值,则调用Runable函数式接口进行处理
17 public Stream<T> stream() 将当前Optional 转换为诶Stream,如果值不存在则转换为empty stream ,存在则转换为包含值的流
2: 常用方法 2.1 构造方法
需要提前检查NPE 使用of方法
不管情况直接构造 使用ofNULLable*()方法
empty() 方法 前面方法间接使用了这个方法