亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

liaosilzu2007 / 3182人閱讀

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

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

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

實(shí)例化Optional

Optional.of()

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

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); //此處會(huì)報(bào)錯(cuò)
        System.out.println(op);
    }

}

Optional.ofNullable()

允許包裹對(duì)象為nul,為null時(shí)返回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()獲取容器中的對(duì)象時(shí),如果對(duì)象為null,會(huì)有java.util.NoSuchElementException異常。所以最好先進(jìn)行isPresent()判斷,如果返回true,說(shuō)明存在,然后再獲取。

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

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

2.equals(Object obj)

判斷兩個(gè)Optional是否相等,主要是所包裹的對(duì)象是否相等

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)常用來(lái)做過(guò)濾。

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)

如果值存在則對(duì)其進(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,只不過(guò)需要在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á)式,否則不做任何處理。注意它沒(méi)有返回值。

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

}

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77451.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    Shimmer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<