摘要:它的出現(xiàn)是為我們解決空指針異常的,以前我們寫代碼如果不進行判斷,會經常出現(xiàn)異常。因為它本身就是個對象,不管放進去的對象為不為,始終不會返回,所以你也不需要在你的業(yè)務流程中進行一大堆的判斷,避免了程序運行時的空指針異常。
想必大家已經在使用jdk1.8做項目開發(fā),但是你對于它里面的一些性特性了解多少呢?有沒有在你的項目中運用呢?現(xiàn)在就和我來一起梳理一下吧。介紹
它是java.util包下的一個類,是一個包裹對象的容器,它可以包裹null或非null的對象。如果你要獲取容器中的對象,需要使用get()方法。它的出現(xiàn)是為我們解決空指針異常的,以前我們寫代碼如果不進行if判斷,會經常出現(xiàn)異?!,F(xiàn)在有了他就會很優(yōu)雅。因為它本身就是個對象,不管放進去的對象為不為null,始終不會返回null,所以你也不需要在你的業(yè)務流程中進行一大堆的判斷,避免了程序運行時的空指針異常。
實例化OptionalOptional.of()
不允許包裹為null的對象,否則程序報錯。
package com.example.demo.jdk; import java.util.Optional; /** * The class OptionalStudy */ public class OptionalStudy { public static void main(String[] args) throws Exception { Optional op = Optional.of(null); //此處會報錯 System.out.println(op); } }
Optional.ofNullable()
允許包裹對象為nul,為null時返回empty Optional
public class OptionalStudy { public static void main(String[] args) throws Exception { Optional op = Optional.ofNullable(null); System.out.println(op); } }
注意:當使用get()獲取容器中的對象時,如果對象為null,會有java.util.NoSuchElementException異常。所以最好先進行isPresent()判斷,如果返回true,說明存在,然后再獲取。
主要方法調用 1.empty()返回empty的Optional實例,用的較少
2.equals(Object obj)判斷兩個Optional是否相等,主要是所包裹的對象是否相等
public class OptionalStudy { public static void main(String[] args) throws Exception { Optional op1 = Optional.of("hell"); Optional op2 = Optional.ofNullable("hello"); System.out.println(op1.equals(op2)); } }
輸出false,如果op1 也為hello則輸出true
3.filter(Predicate super T> predicate)如果值存在并且滿足斷言,則返回滿足條件的Optional,否則返回empty。經常用來做過濾。
public class OptionalStudy { public static void main(String[] args) throws Exception { Optionalop = Optional.of("jack"); Optional res = op.filter((name)-> name.length()>6); System.out.println(res); } }
輸出empty
4.map(Function super T,? extends U> mapper)如果值存在則對其進行mapping函數(shù)操作,如果mappping結果不為空則返回Optional,否則返回empty。
public class OptionalStudy { public static void main(String[] args) throws Exception { Optionalop = Optional.of("jack"); Optional res = op.map((name) -> "hello,"+name); System.out.println(res); } }
輸出hello,jack
5.flatMap(Function super T,Optional> mapper)功能類似map,只不過需要在mapping函數(shù)中,自己封裝成Optional。
public class OptionalStudy { public static void main(String[] args) throws Exception { Optional6. orElse(T other)op = Optional.of("jack"); Optional res = op.flatMap((name) -> Optional.ofNullable("hello,"+name)); System.out.println(res); } }
值存在則返回,否則返回其它值。相當于給默認值。
public class OptionalStudy { public static void main(String[] args) throws Exception { Optionalop = Optional.ofNullable(null); System.out.println(op.orElse("other")); } }
輸出other。
7. orElseGet(Supplier extends T> other)功能類似orElse都是返回值,不同在于它能使用lambda表達式更靈活的處理返回默認值
public class OptionalStudy { public static void main(String[] args) throws Exception { Optionalop = Optional.ofNullable(null); System.out.println(op.orElseGet(() -> String.valueOf(true))); } }
輸出 true
8. ifPresent(Consumer super T> consumer)如果值存在,則執(zhí)行l(wèi)ambda表達式,否則不做任何處理。注意它沒有返回值。
public class OptionalStudy { public static void main(String[] args) throws Exception { Optionalop = Optional.ofNullable(null); op.ifPresent((v)->{System.out.println(v);}); } }
沒有任何輸出,因為值不存在。
總結以上就是所有能夠用到的方法,可以在你的項目中去使用。對所有方法的參數(shù)使用optional進行包裹,避免空指針。更多學習總結,請關注我的公眾號mike啥都想搞,更有精品學習資料相送。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77451.html
摘要:雖然目前工作環(huán)境仍然以為主,不過目前已是大勢所趨了。標準函數(shù)式接口新的包定義旨在使用的廣泛函數(shù)式接口。這一改進使得擁有了類似于多繼承的能力。 從Java8發(fā)布到現(xiàn)在有好幾年了,而Java9也提上發(fā)布日程了(沒記錯的話好像就是這個月2017年7月,也許會再度跳票吧,不過沒關系,穩(wěn)定大于一切,穩(wěn)定了再發(fā)布也行),現(xiàn)在才開始去真正學習,說來也是慚愧。雖然目前工作環(huán)境仍然以Java6為主,不過...
摘要:會在數(shù)據(jù)源內部隱式的遍歷進行處理。會并行遍歷數(shù)據(jù),將數(shù)據(jù)分成若干段,同時進行處理,最終匯總結果一起輸出。結束操作會觸發(fā)實際計算,計算發(fā)生時會把所有中間操作積攢的操作以的方式執(zhí)行,這樣可以減少迭代次數(shù)。為函數(shù)式編程而生。 Stream實現(xiàn)了對數(shù)據(jù)源的流式處理,它可以并行操作,提高數(shù)據(jù)處理效率。 什么是流 流不是集合,它不對數(shù)據(jù)做保存,只是最數(shù)據(jù)進行算法處理,比如最大值,最小值,排序等操作...
摘要:基礎語法變量提升都可以個難點在編譯時執(zhí)行并沒有報錯,執(zhí)行結果如圖注意結果沒有變更改結果值變了參考新特性未完一直更新 基礎語法 變量提升 //es5 var arr = []; for(var i=0; i
摘要:運行機制分為源,中間操作,終止操作。反過來說,目前還無法專為某個并行流指定這個值。我們在本節(jié)中已經指出,并行流不總是比順序流快。特別是和等依賴于元素順序的操作,它們在并行流上執(zhí)行的代價非常大。1 Stream Stream是一組用來處理數(shù)組,集合的API。 1.1 特性 不是數(shù)據(jù)結構,沒有內部存儲。 不支持索引訪問。 延遲計算 支持并行 很容易生成數(shù)據(jù)或集合 支持過濾,查找,轉換,匯總,...
閱讀 3407·2021-11-25 09:43
閱讀 2294·2021-09-06 15:02
閱讀 3538·2021-08-18 10:21
閱讀 3341·2019-08-30 15:55
閱讀 2343·2019-08-29 17:06
閱讀 3534·2019-08-29 16:59
閱讀 962·2019-08-29 13:47
閱讀 2756·2019-08-26 13:24