最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java9新特性Java.util.Optional優(yōu)化與增強(qiáng)解析

 更新時間:2022年03月15日 16:48:43   作者:字母哥哥  
這篇文章主要為大家介紹了Java9新特性Java.util.Optional優(yōu)化與增強(qiáng)使用說明解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

我計劃在后續(xù)的一段時間內(nèi),寫一系列關(guān)于java 9的文章,雖然java 9 不像Java 8或者Java 11那樣的核心java版本,但是還是有很多的特性值得關(guān)注。期待您能關(guān)注我,我將把java 9 寫成一系列的文章,大概十篇左右,本文是第7篇。

java9在interface中定義私有方法詳解

java9版本特性資源自動關(guān)閉的語法增強(qiáng)

Java9版本新特性同一個Jar支持多JDK版本運(yùn)行

java9新特性Reactive Stream響應(yīng)式編程 API

java9新特性Collection集合類的增強(qiáng)與優(yōu)化方法示例

Java9新特性Stream流API優(yōu)化與增強(qiáng)

Java9新特性Module模塊化編程示例演繹

Java9新特性對HTTP2協(xié)議支持與非阻塞HTTP API

java.util.Optional是在Java 8版本中新增的類,一定程度上可以改善編程過程中的NullPointException的問題。在Java 9中對這個類新增了一些方法進(jìn)行增強(qiáng),下面我們一起來看一下,順便也回顧一下在Java 8中它的用法。

一、Java9的ifPresentOrElse(Consumer,Runnable)

1.1.Java 9 中的增強(qiáng)

如果存在值,則此新方法將執(zhí)行給定的Consumer操作,否則運(yùn)行給定的Runnable操作。下面的代碼先使用Java 8的的Stream流過濾3的倍數(shù),然后通過findFirst找到第一個3的倍數(shù)。如果找到一個這樣的值,就print控制臺打印出來;如果沒找到一個這樣的值,就輸出"沒有找到3的倍數(shù)"

ifPresentOrElse(Consumer,Runnable)的語義可以解釋為:ifPresent就Consumer,OrElse就Runnable。這是Java 9 才有的增強(qiáng)方法。

 IntStream.of(1, 2, 4)
          .filter(i -> i % 3 == 0)
          .findFirst()
          .ifPresentOrElse(System.out::println, () -> {  
              System.out.println("沒有找到3的倍數(shù)");
          });

在1、2、4中沒有3的倍數(shù),所以輸出結(jié)果如下

沒有找到3的倍數(shù)

如果是下面的2、6、8數(shù)組被過濾,最終控制臺輸出結(jié)果為:6

 IntStream.of(2, 6, 8)
          .filter(i -> i % 3 == 0)
          .findFirst()
          .ifPresentOrElse(System.out::println, () -> {
              System.out.println("沒有找到3的倍數(shù)");
          });   // 6

1.2.回顧一下Java 8中的寫法

Java 8 Optional.isPresent():

如果使用Java 8 ,沒有ifPresentOrElse(Consumer,Runnable)方法,上文中同樣的代碼你應(yīng)該是這樣寫的:自己去寫if和else進(jìn)行判斷。同樣輸出:沒有找到3的倍數(shù)

 OptionalInt opt = IntStream.of(1, 2, 4)
                            .filter(i -> i % 3 == 0)
                            .findFirst();
 if (opt.isPresent()) {
     System.out.println(opt.getAsInt());
 } else {
     System.out.println("沒有找到3的倍數(shù)");
 }

Java 8 Optional.ifPresent():

ifPresent()方法在值不存在的時候,沒有提供一個可選的操作。所以下面的代碼在執(zhí)行之后,沒有orElse動作,沒有任何輸出,這樣不是很友好。

 IntStream.of(1, 2, 4)
          .filter(i -> i % 3 == 0)
          .findFirst()
          .ifPresent(System.out::println);

Java 8 Optional.orElse():

orElse()方法在value返回值為空的之后,給出一個默認(rèn)值。下文代碼中給出一個默認(rèn)值-1。

 int result = IntStream.of(1, 2, 4)
                       .filter(i -> i % 3 == 0)
                       .findFirst()
                       .orElse(-1);
 System.out.println(result);   //-1

二、Java9的Optional.or(Supplier)

該方法在找不到值的時候,生成一個新的Optional出來。下文代碼過濾數(shù)組[‘a’, ‘b’, ‘c’],isDigit判斷數(shù)組中是否有數(shù)字字符,明顯沒有,所以findFirst找不到一個這樣的值。所以生成一個默認(rèn)值: Optional.of('0')

 char digit = Stream.of('a', 'b', 'c')
                    .filter(e -> Character.isDigit(e))
                    .findFirst()
                    .or(() -> Optional.of('0')).get();
 System.out.println(digit);   //0

Java8 中的 orElseGet()

Java 8中的Optional.orElseGet()方法也具備同樣的功能。下文代碼過濾數(shù)組[‘a’, ‘b’, ‘c’],isDigit判斷數(shù)組中是否有數(shù)字字符,明顯沒有,所以findFirst找不到一個這樣的值。所以通過orElseGet獲取一個默認(rèn)值: '0'

 char result = Stream.of('a', 'b', 'c')
                    .filter(c -> Character.isDigit(c))
                    .findFirst()
                    .orElseGet(()->'0');
 System.out.println(result);   //0

三、Java9的Optional.stream()

在本例中Optional.stream()方法返回僅包含一個最大值元素的Stream流。如果該值不存在,則返回空Stream:

 OptionalInt opt1 = IntStream.of(2, 5, 6).max();  //求最大值
 OptionalInt opt2 = IntStream.of(1, 3, 7).max();  //求最大值
 IntStream.concat(opt1.stream(), opt2.stream())  //將2個流合并
          .forEach(System.out::println);   //將合并后的流數(shù)據(jù)打印

控制臺輸出的結(jié)果如下:

 6
 7

以上就是Java9新特性Java.util.Optional優(yōu)化與增強(qiáng)解析的詳細(xì)內(nèi)容,更多關(guān)于Java9新特性O(shè)ptional增強(qiáng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • win10 eclipse配置環(huán)境變量的教程圖解

    win10 eclipse配置環(huán)境變量的教程圖解

    本文通過圖文并茂的形式給大家介紹了win10 eclipse配置環(huán)境變量的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-07-07
  • 使用 Apache POI 在 Java 中寫入 Excel 文件的方法

    使用 Apache POI 在 Java 中寫入 Excel

    這篇文章詳細(xì)介紹了如何使用ApachePOI在Java中編寫Excel文件的技巧,包括創(chuàng)建工作簿、工作表、行和單元格,以及如何處理不同版本的Excel文件,通過詳細(xì)的步驟和代碼示例,讀者可以快速掌握ApachePOI的基本使用方法,感興趣的朋友一起看看吧
    2025-02-02
  • spring boot中內(nèi)嵌redis的使用方法示例

    spring boot中內(nèi)嵌redis的使用方法示例

    這篇文章主要給大家介紹了關(guān)于spring boot中內(nèi)嵌redis使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級緩存的問題

    MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級緩存的問題

    Mybatis內(nèi)置的二級緩存在分布式環(huán)境下存在分布式問題,無法使用,但是我們可以整合Redis來實(shí)現(xiàn)分布式的二級緩存,這篇文章給大家介紹MyBatis Plus整合Redis實(shí)現(xiàn)分布式二級緩存,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解

    RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解

    這篇文章主要為大家介紹了RocketMQ生產(chǎn)者如何規(guī)避故障Broker方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Java中FileWriter類的常用方法說明

    Java中FileWriter類的常用方法說明

    這篇文章主要介紹了Java中FileWriter類的常用方法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot如何從配置文件中讀取配置參數(shù)

    SpringBoot如何從配置文件中讀取配置參數(shù)

    這篇文章主要介紹了SpringBoot如何從配置文件中讀取配置參數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • servlet之web路徑問題_動力節(jié)點(diǎn)Java學(xué)院整理

    servlet之web路徑問題_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了servlet之web路徑問題的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • ZooKeeper Java API編程實(shí)例分析

    ZooKeeper Java API編程實(shí)例分析

    本文主要通過實(shí)例給大家詳細(xì)分析了ZooKeeper用JAVA實(shí)現(xiàn)API編程的知識要點(diǎn)。
    2017-11-11
  • SpringBoot?AnnotationUtils工具類的使用實(shí)例詳解

    SpringBoot?AnnotationUtils工具類的使用實(shí)例詳解

    這篇文章主要介紹了SpringBoot?AnnotationUtils工具類的使用,使用自定義注解標(biāo)記業(yè)務(wù)方法,原生Java獲取注解及AnnotationUtils工具類獲取方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09

最新評論

新兴县| 潢川县| 庆阳市| 尤溪县| 连江县| 郯城县| 玉溪市| 包头市| 古交市| 高雄市| 南华县| 泸溪县| 宁国市| 灵石县| 华池县| 茶陵县| 冷水江市| 河源市| 石城县| 黄浦区| 白城市| 大厂| 大方县| 义马市| 衡东县| 延边| 邻水| 宝山区| 石棉县| 新建县| 周至县| 南部县| 河曲县| 临高县| 乐平市| 中江县| 卢龙县| 宜昌市| 山西省| 平邑县| 陇川县|