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

資訊專欄INFORMATION COLUMN

Java8新特性之Optional

stackfing / 3353人閱讀

摘要:上一篇小樂帶大家了解了新特性之,接下來將會(huì)繼續(xù)述說新特性之類是一個(gè)容器類,代表一個(gè)值存在或不存在,原來用表示一個(gè)值不存在,現(xiàn)在可以更好的表達(dá)這個(gè)概念。并且可以避免空指針異常。如果有值則將其返回,否則拋出。隱士地其中進(jìn)行了判斷。

上一篇小樂帶大家了解了Java8新特性之Stream,接下來將會(huì)繼續(xù)述說Java新特性之Optional

Optional類(java.util.Optional)是一個(gè)容器類,代表一個(gè)值存在或不存在,原來用null表示一個(gè)值不存在,現(xiàn)在Optional可以更好的表達(dá)這個(gè)概念。并且可以避免空指針異常。

1、of

為非null的值創(chuàng)建一個(gè)Optional,如果值為null,則會(huì)拋出NullPointerException

Optional optional = Optional.of(13);
System.out.println(optional)
2、ofNullable

為指定的值創(chuàng)建一個(gè)Optional,如果指定的值為null,則返回一個(gè)空的Optional。

Optional optional2 = Optional.ofNullable(null);
System.out.println(optional2);
optional2 = Optional.ofNullable("aaa");
System.out.println(optional2);


3、isPresent

如果值存在返回true,否則返回false。

Optional optional2 = Optional.ofNullable(null);
System.out.println(optional2);
System.out.println(optional2.isPresent());

optional2 = Optional.ofNullable("aaa");
System.out.println(optional2);
System.out.println(optional2.isPresent());

4、get

如果Optional有值則將其返回,否則拋出NoSuchElementException。

optional2 = Optional.ofNullable("aaa");
System.out.println(optional2);
System.out.println(optional2.isPresent());
System.out.println(optional2.get());

5、ifPresent

 

如果Optional實(shí)例有值則為其調(diào)用consumer,否則不做處理 。隱士地其中進(jìn)行了null判斷。

public static void main(String[] args) {
    String str1 = "hello";
    String str2 = null;
    Optional optional1 = Optional.ofNullable(str1);
    Optional optional2 = Optional.ofNullable(str2);

    optional1.ifPresent(str->System.out.println(str.length()));
    optional2.ifPresent(str-> System.out.println(str.length()));
}

6、orElse

如果有值則將其返回,否則返回指定的其它值。

public static void main(String[] args) {
    String str1 = "hello";
    String str2 = null;
    Optional optional1 = Optional.ofNullable(str1);
    Optional optional2 = Optional.ofNullable(str2);
    System.out.println(optional1.orElse("默認(rèn)字符串"));
    System.out.println(optional2.orElse("默認(rèn)字符串"));
}

7、orElseGet

orElseGet與orElse方法類似,區(qū)別在于得到的默認(rèn)值。orElse方法將傳入的一個(gè)值作為默認(rèn)值,orElseGet方法可以接受Supplier接口的實(shí)現(xiàn)用來生成默認(rèn)值

public static void main(String[] args) {
    Integer i = 20;
    Optional op = Optional.ofNullable(i);
    System.out.println(op.orElseGet(()->0));
    System.out.println(Optional.ofNullable(null).orElseGet(()->0));
}

8、orElseThrow

如果有值則將其返回,否則拋出supplier接口創(chuàng)建的異常。

public static void main(String[] args) {
    // 自己指定異常
    System.out.println((Optional.ofNullable("a").orElseThrow(()->new IndexOutOfBoundsException())));
    System.out.println((Optional.ofNullable(null).orElseThrow(()->new IndexOutOfBoundsException())));
}

9、map

map處理有值的情況,如果有值,則對(duì)其執(zhí)行調(diào)用map參數(shù)中的函數(shù)得到返回值,否則返回空Optional。

public static void main(String[] args) {
   List list = new ArrayList(){
       {
            add("aaa");
            add("bbb");
            add(null);
       }
   };

   list.stream().forEach(temp ->{
        Optional opt = Optional.ofNullable(temp);
        System.out.println(opt.map(n -> {
           return n.toUpperCase();
        }).orElse("Nothing"));
   });

   // 簡寫為如下形式
    list.stream().forEach(temp->{
        System.out.println(Optional.ofNullable(temp).map(n->n.toUpperCase()).orElse("Nothing"));
    });
}

10、flatMap

如果有值,為其執(zhí)行mapping函數(shù)返回Optional類型返回值,否則返回空Optional。flatMap與map(Funtion)方法類似,區(qū)別在于flatMap中的mapper返回值必須是Optional。調(diào)用結(jié)束時(shí),flatMap不會(huì)對(duì)結(jié)果用Optional封裝。 可以將內(nèi)容

public static void main(String[] args) {
    Optional opt1 = Optional.ofNullable("aaa");
    Optional opt2 = Optional.ofNullable(null);
    System.out.println(opt1.flatMap(n->{
        return Optional.ofNullable(n.toUpperCase());
    }).orElse("還會(huì)沒有嗎"));

    System.out.println( opt2.flatMap(n->{
        return Optional.ofNullable(n.toUpperCase());
    }).orElse("還會(huì)沒有嗎"));
}
11、filter

如果有值并且滿足斷言條件返回包含該值的Optional,否則返回空Optional。

public static void main(String[] args) {
    Optional opt1 = Optional.ofNullable("aabbbbaa");
    Optional opt2 = Optional.ofNullable(null);

    System.out.println(opt1.filter(value->value.length()>6));
    System.out.println(opt2.filter(value->value.length()>6));
}

好了,Java8新特性之Optional就介紹到這里了,接下去小樂將會(huì)繼續(xù)帶大家了解Java8新特性,請(qǐng)繼續(xù)關(guān)注,轉(zhuǎn)載請(qǐng)說明出處和作者。

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

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

相關(guān)文章

  • 樂字節(jié)Java8核心特性Optional

    摘要:大家好啊,上次小樂給大家介紹了最最重要的一個(gè)特性流,點(diǎn)擊可以回顧哦。并且可以避免空指針異常。這種操作對(duì)于參數(shù)判斷提供很大便利,例如參數(shù)滿足指定條件的后續(xù)操作查詢操作字符串拼接,常見的處理多請(qǐng)求頁面轉(zhuǎn)發(fā)處理等操作。 大家好啊,上次小樂給大家介紹了Java8最最重要的一個(gè)特性——Stream流,點(diǎn)擊可以回顧哦。 Optional類(java.util.Optional)是一個(gè)容器類,代表一...

    姘存按 評(píng)論0 收藏0
  • 樂字節(jié)-Java8特性Stream流(下)

    摘要:歸約操作計(jì)算有效訂單總金額有效訂單總金額收集數(shù)據(jù)收集將流轉(zhuǎn)換為其他形式,方法作為終端操作,接收一個(gè)接口的實(shí)現(xiàn),用于給中元素做匯總的方法。 接上一篇:《Java8新特性之stream》,下面繼續(xù)接著講Stream 5、流的中間操作 常見的流的中間操作,歸為以下三大類:篩選和切片流操作、元素映射操作、元素排序操作:showImg(https://segmentfault.com/img/b...

    20171112 評(píng)論0 收藏0
  • 樂字節(jié)-Java8特性Date API

    摘要:上一篇文章,小樂給大家?guī)砹诵绿匦灾?,接下來本文將?huì)給大家介紹新特性之前言通過發(fā)布新的來進(jìn)一步加強(qiáng)對(duì)日期與時(shí)間的處理。 上一篇文章,小樂給大家?guī)砹薐ava8新特性之Optional,接下來本文將會(huì)給大家介紹Java8新特性之Date API 前言: Java 8通過發(fā)布新的Date-Time API來進(jìn)一步加強(qiáng)對(duì)日期與時(shí)間的處理。 舊版的 Java 中,日期時(shí)間 API 存在諸多問題...

    suemi 評(píng)論0 收藏0
  • Introducing FP in Java8

    摘要:函數(shù)副作用會(huì)給程序設(shè)計(jì)帶來不必要的麻煩,引入潛在的,并降低程序的可讀性。所以只能采用這種曲線救國的方式。則是把這種曲線救國拿到了臺(tái)面上,并昭告天下,同時(shí)還對(duì)提供了一些語法支持。是自由變量,提供執(zhí)行上下文,觸發(fā)閉包執(zhí)行。 背景 自從2013年放棄了Java就再也沒有碰過。期間Java還發(fā)布了重大更新:引入lambda,但是那會(huì)兒我已經(jīng)玩了一段時(shí)間Scala,對(duì)Java已經(jīng)瞧不上眼。相比S...

    Prasanta 評(píng)論0 收藏0
  • Java8特性和Lambda表達(dá)式

    摘要:表達(dá)式體現(xiàn)了函數(shù)式編程的思想,即一個(gè)函數(shù)亦可以作為另一個(gè)函數(shù)參數(shù)和返回值,使用了函數(shù)作參數(shù)返回值的函數(shù)被稱為高階函數(shù)。對(duì)流對(duì)象進(jìn)行及早求值,返回值不在是一個(gè)對(duì)象。 Java8主要的改變是為集合框架增加了流的概念,提高了集合的抽象層次。相比于舊有框架直接操作數(shù)據(jù)的內(nèi)部處理方式,流+高階函數(shù)的外部處理方式對(duì)數(shù)據(jù)封裝更好。同時(shí)流的概念使得對(duì)并發(fā)編程支持更強(qiáng)。 在語法上Java8提供了Lamb...

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

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

0條評(píng)論

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