详解Java8 Optional类{最全}

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() 方法 前面方法间接使用了这个方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfsgs.html