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)

相關文章
相關標籤/搜索