成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Jdk1.8新特性學(xué)習(xí)(Optional)

liaosilzu2007 / 3116人閱讀

摘要:它的出現(xiàn)是為我們解決空指針異常的,以前我們寫代碼如果不進(jìn)行判斷,會經(jīng)常出現(xiàn)異常。因?yàn)樗旧砭褪莻€對象,不管放進(jìn)去的對象為不為,始終不會返回,所以你也不需要在你的業(yè)務(wù)流程中進(jìn)行一大堆的判斷,避免了程序運(yùn)行時的空指針異常。

想必大家已經(jīng)在使用jdk1.8做項(xiàng)目開發(fā),但是你對于它里面的一些性特性了解多少呢?有沒有在你的項(xiàng)目中運(yùn)用呢?現(xiàn)在就和我來一起梳理一下吧。
介紹

它是java.util包下的一個類,是一個包裹對象的容器,它可以包裹null或非null的對象。如果你要獲取容器中的對象,需要使用get()方法。它的出現(xiàn)是為我們解決空指針異常的,以前我們寫代碼如果不進(jìn)行if判斷,會經(jīng)常出現(xiàn)異?!,F(xiàn)在有了他就會很優(yōu)雅。因?yàn)樗旧砭褪莻€對象,不管放進(jìn)去的對象為不為null,始終不會返回null,所以你也不需要在你的業(yè)務(wù)流程中進(jìn)行一大堆的判斷,避免了程序運(yùn)行時的空指針異常。

實(shí)例化Optional

Optional.of()

不允許包裹為null的對象,否則程序報(bào)錯。

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); //此處會報(bào)錯
        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);
    }

}

注意:當(dāng)使用get()獲取容器中的對象時,如果對象為null,會有java.util.NoSuchElementException異常。所以最好先進(jìn)行isPresent()判斷,如果返回true,說明存在,然后再獲取。

主要方法調(diào)用 1.empty()

返回empty的Optional實(shí)例,用的較少

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 predicate)

如果值存在并且滿足斷言,則返回滿足條件的Optional,否則返回empty。經(jīng)常用來做過濾。

public class OptionalStudy {
    
    public static void main(String[] args) throws Exception {
        Optional op = Optional.of("jack");
        Optional res = op.filter((name)-> name.length()>6);
        System.out.println(res);
    }

}

輸出empty

4.map(Function mapper)

如果值存在則對其進(jìn)行mapping函數(shù)操作,如果mappping結(jié)果不為空則返回Optional,否則返回empty。

public class OptionalStudy {
    
    public static void main(String[] args) throws Exception {
        Optional op = Optional.of("jack");
        Optional res = op.map((name) -> "hello,"+name);
        System.out.println(res);
    }

}

輸出hello,jack

5.flatMap(Function> mapper)

功能類似map,只不過需要在mapping函數(shù)中,自己封裝成Optional。

public class OptionalStudy {
    
    public static void main(String[] args) throws Exception {
        Optional op = Optional.of("jack");
        Optional res = op.flatMap((name) -> Optional.ofNullable("hello,"+name));
        System.out.println(res);
    }

}
6. orElse(T other)

值存在則返回,否則返回其它值。相當(dāng)于給默認(rèn)值。

public class OptionalStudy {
    
    public static void main(String[] args) throws Exception {
        Optional op = Optional.ofNullable(null);
        System.out.println(op.orElse("other"));
    }

}

輸出other。

7. orElseGet(Supplier other)

功能類似orElse都是返回值,不同在于它能使用lambda表達(dá)式更靈活的處理返回默認(rèn)值

public class OptionalStudy {
    
    public static void main(String[] args) throws Exception {
        Optional op = Optional.ofNullable(null);
        System.out.println(op.orElseGet(() -> String.valueOf(true)));
    }

}

輸出 true

8. ifPresent(Consumer consumer)

如果值存在,則執(zhí)行l(wèi)ambda表達(dá)式,否則不做任何處理。注意它沒有返回值。

public class OptionalStudy {
    
    public static void main(String[] args) throws Exception {
        Optional op = Optional.ofNullable(null);
        op.ifPresent((v)->{System.out.println(v);});
    }

}

沒有任何輸出,因?yàn)橹挡淮嬖凇?/p> 總結(jié)

以上就是所有能夠用到的方法,可以在你的項(xiàng)目中去使用。對所有方法的參數(shù)使用optional進(jìn)行包裹,避免空指針。更多學(xué)習(xí)總結(jié),請關(guān)注我的公眾號mike啥都想搞,更有精品學(xué)習(xí)資料相送。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77451.html

相關(guān)文章

  • Java8新特學(xué)習(xí)筆記

    摘要:雖然目前工作環(huán)境仍然以為主,不過目前已是大勢所趨了。標(biāo)準(zhǔn)函數(shù)式接口新的包定義旨在使用的廣泛函數(shù)式接口。這一改進(jìn)使得擁有了類似于多繼承的能力。 從Java8發(fā)布到現(xiàn)在有好幾年了,而Java9也提上發(fā)布日程了(沒記錯的話好像就是這個月2017年7月,也許會再度跳票吧,不過沒關(guān)系,穩(wěn)定大于一切,穩(wěn)定了再發(fā)布也行),現(xiàn)在才開始去真正學(xué)習(xí),說來也是慚愧。雖然目前工作環(huán)境仍然以Java6為主,不過...

    wthee 評論0 收藏0
  • JDK 1.8 新特學(xué)習(xí)(Stream)

    摘要:會在數(shù)據(jù)源內(nèi)部隱式的遍歷進(jìn)行處理。會并行遍歷數(shù)據(jù),將數(shù)據(jù)分成若干段,同時進(jìn)行處理,最終匯總結(jié)果一起輸出。結(jié)束操作會觸發(fā)實(shí)際計(jì)算,計(jì)算發(fā)生時會把所有中間操作積攢的操作以的方式執(zhí)行,這樣可以減少迭代次數(shù)。為函數(shù)式編程而生。 Stream實(shí)現(xiàn)了對數(shù)據(jù)源的流式處理,它可以并行操作,提高數(shù)據(jù)處理效率。 什么是流 流不是集合,它不對數(shù)據(jù)做保存,只是最數(shù)據(jù)進(jìn)行算法處理,比如最大值,最小值,排序等操作...

    yhaolpz 評論0 收藏0
  • CSS3新特學(xué)習(xí)

    摘要:引言最近發(fā)現(xiàn)很多的新特性不熟悉,所以今天把它們都學(xué)習(xí)一邊,做出效果加深印象,說到還加了蠻多的特性,像一些的一些效果,動畫屬性等。 引言 最近發(fā)現(xiàn)很多css3的新特性不熟悉,所以今天把它們都學(xué)習(xí)一邊,做出效果加深印象,說到css3還加了蠻多的特性,像一些border的一些效果,動畫屬性animation trasiform等。 1.border-radius(邊框圓角) 效果 showI...

    wing324 評論0 收藏0
  • Es6新特學(xué)習(xí)

    摘要:基礎(chǔ)語法變量提升都可以個難點(diǎn)在編譯時執(zhí)行并沒有報(bào)錯,執(zhí)行結(jié)果如圖注意結(jié)果沒有變更改結(jié)果值變了參考新特性未完一直更新 基礎(chǔ)語法 變量提升 //es5 var arr = []; for(var i=0; i

    AlphaWallet 評論0 收藏0
  • JDK1.8-Stream中常用的API(流操作)

    摘要:運(yùn)行機(jī)制分為源,中間操作,終止操作。反過來說,目前還無法專為某個并行流指定這個值。我們在本節(jié)中已經(jīng)指出,并行流不總是比順序流快。特別是和等依賴于元素順序的操作,它們在并行流上執(zhí)行的代價非常大。1 Stream Stream是一組用來處理數(shù)組,集合的API。 1.1 特性 不是數(shù)據(jù)結(jié)構(gòu),沒有內(nèi)部存儲。 不支持索引訪問。 延遲計(jì)算 支持并行 很容易生成數(shù)據(jù)或集合 支持過濾,查找,轉(zhuǎn)換,匯總,...

    Shimmer 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<