Optional

前言

1. Java8新增的Option类本质上相似于异常检查,迫使API用户关注/处理Option类中是否包含内容,从而避免由于null值检查而致使的潜在隐患;segmentfault

2. Option不支持序列化,而且要尽可能避免将Optional用于类属性方法参数集合元素。这三种状况能够用null值代替,不必用Option;app

3. Option自己为引用类型,大量使用在必定程度上会影响JVM的堆内存和垃圾回收;函数

4. 避免使用Optional的 equals()、hashCode()、==方法;参见这里spa

API介绍1.8

构造函数

Optional的构造函数是私有的,不能由外部调用(不能new)3d

static <T> Optional<T> of(T value) 

若是value参数为空,会报NPE异常,通常不用;blog

static <T> Optional<T> ofNullable(T value)

若是value参数为空,会报No value present异常;接口

boolean isPresent()

判断Option中是否有元素;内存

void ifPresent(Consumer<? super T> consumer)

若是Optional有元素,就消费;方法中的参数Consumer为函数式接口get

T get()

 获取Option中的元素,必定要配合isPresent()方法使用;hash

T orElse(T other)

不管Optional容器是null仍是non-null,都会执行orElse里的方法,若是Option容器为空,则将参数中的value放在Optional容器,不然不放;

orElseGet(Supplier other)

只有Optional容器为null,才会执行orElse里的方法,方法中的参数Supplier为函数式接口,该接口默认抽象get方法参数为空;

T orElseThrow(Supplier  exception) throws X

只有Optional容器为null,才会执行orElseThrow的方法,方法中的参数Supplier为函数式接口,该接口默认抽象get方法参数为空;

Optional<T> filter(Predicate  predicate)

针对Optional容器里的元素进行过滤,方法中的参数Predicate为函数式接口,该接口默认方法为test(T t);

<U> Optional<U> map(Function mapper)

针对Option中的元素进行运算,以下:Optional容器中维护了一个List,List中存放Apple,目的是将Apple重量大于150的苹果记录;

<U> Optional<U> flatMap(Function mapper)

相关文章
相关标签/搜索