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

JDK12的新特性之teeing collectors

 更新時間:2020年05月13日 10:09:47   作者:flydean程序那些事  
這篇文章主要介紹了JDK12的新特性之teeing collectors的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

簡介

JDK12為java.util.stream.Collectors添加了一個新的teeing方法,怎么翻譯呢?看到很多人都把它翻譯成“發(fā)球臺”,我不禁潸然淚下,哪里有那么復(fù)雜,tee就是T。它的作用就像是一個T型,數(shù)據(jù)從兩頭進(jìn)入,然后從一頭流出。teeing的作用也就在此。

talk is cheap, show me the code

我最喜歡的就是一言不合上代碼,文字的描述總是讓人有點(diǎn)摸不著頭腦,程序員還是要用程序說話。有了程序就有了邏輯,有了邏輯一切都有了。

各大網(wǎng)站上的例子都喜歡舉maxBy和minBy的例子,我這里偏不,下面舉一個統(tǒng)計(jì)學(xué)生平均分?jǐn)?shù)和總分?jǐn)?shù)的例子,希望大家能夠喜歡:

@Test
  public void useTeeing(){
    List<Student> studentList= Arrays.asList(
        new Student("alice", 90),
        new Student("boy", 20),
        new Student("bruce", 40),
        new Student("batman", 100)
    );
    String teeingResult=studentList.stream().collect(
        Collectors.teeing(
            Collectors.averagingInt(Student::getScore),
            Collectors.summingInt(Student::getScore),
            (s1,s2)-> s1+ ":"+ s2
        )
    );
    log.info(teeingResult);
  }

好了,代碼來了,上面我構(gòu)建了一個Student的List。然后通過Collectors.teeing操作,傳入了averagingInt和summingInt,最后通過一個merge表達(dá)式生成了最后的字符串。

我們看下輸出結(jié)果:

[main] INFO com.flydean.TeeingCollector - 62.5:250

Teeing方法深度剖析

作為一個有追求的程序員,不深入了解下T的本質(zhì),肯定是睡不著的。我們看下T的定義:

public static <T, R1, R2, R>
  Collector<T, ?, R> teeing(Collector<? super T, ?, R1> downstream1,
  Collector<? super T, ?, R2> downstream2,
  BiFunction<? super R1, ? super R2, R> merger)

首先分析一下T方法的返回值,T返回一個Collector。Collector是一個Reduction operations。它將輸入的元素經(jīng)過累計(jì)之后轉(zhuǎn)換成為一個結(jié)果集合。

我們再看一下Collector接口的定義:

public interface Collector<T, A, R> 

Collector定義了三個參數(shù)類型,T是輸入元素的類型,A是reduction operation的累加類型也就是Supplier的初始類型,R是最終的返回類型。 我們畫個圖來看一下這些類型之間的轉(zhuǎn)換關(guān)系:

Stream中的A和Supplier中的A經(jīng)過accumulator和combiner,最終在finisher中轉(zhuǎn)換成R。

T方法需要傳入兩個downstream,這兩個downstream是兩個Collector,可以看到兩者的返回類型是可以不同的。

最后一個merger將R1和R2兩種類型轉(zhuǎn)換成了最終的返回類型R。

Characteristics

最后講一下Characteristics,Characteristics是指Collector的特征。

Characteristics是為了更好的執(zhí)行collector的reduce操作。

比如,如果Characteristics是UNORDERED,則表示Collector在處理過程中并不保存元素的順序,是沒有順序的。

如果Characteristics是CONCURRENT,則表示Collector會處理多線程的問題,而不需要Stream API來考慮。

因?yàn)門方法的前面兩個參數(shù)是Collector,并且最后也返回一個Collector。

那么如果downstream1和downstream2都是UNORDERED,T最后返回的Collector也是UNORDERED的。

如果downstream1和downstream2都是CONCURRENT,T最后返回的Collector也是CONCURRENT的。

總結(jié)

上面就是T的所有介紹了。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

到此這篇關(guān)于JDK12的新特性之teeing collectors的文章就介紹到這了,更多相關(guān)jdk新特征teeing collectors內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java并發(fā)應(yīng)用之任務(wù)執(zhí)行分析

    Java并發(fā)應(yīng)用之任務(wù)執(zhí)行分析

    這篇文章主要為大家詳細(xì)介紹了JavaJava并發(fā)應(yīng)用編程中任務(wù)執(zhí)行分析的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07
  • SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊中心的方法

    SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊中心的方法

    本文主要介紹了SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊中心,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot中使用AOP實(shí)現(xiàn)日志記錄功能

    SpringBoot中使用AOP實(shí)現(xiàn)日志記錄功能

    AOP的全稱是Aspect-Oriented Programming,即面向切面編程(也稱面向方面編程),它是面向?qū)ο缶幊蹋∣OP)的一種補(bǔ)充,目前已成為一種比較成熟的編程方式,本文給大家介紹了SpringBoot中使用AOP實(shí)現(xiàn)日志記錄功能,需要的朋友可以參考下
    2024-05-05
  • java8之LocalDate的使用、LocalDate格式化問題

    java8之LocalDate的使用、LocalDate格式化問題

    這篇文章主要介紹了java8之LocalDate的使用、LocalDate格式化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • java 最新Xss攻擊與防護(hù)(全方位360°詳解)

    java 最新Xss攻擊與防護(hù)(全方位360°詳解)

    這篇文章主要介紹了java 最新Xss攻擊與防護(hù)(全方位360°詳解),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 如何使用JFrame完成動態(tài)模擬時鐘

    如何使用JFrame完成動態(tài)模擬時鐘

    本文介紹了如何使用JFrame完成動態(tài)模擬時鐘,需要的朋友可以參考下
    2015-08-08
  • springboot中實(shí)現(xiàn)上傳文件的功能簡單示例

    springboot中實(shí)現(xiàn)上傳文件的功能簡單示例

    這篇文章主要給大家介紹了關(guān)于springboot中實(shí)現(xiàn)上傳文件功能的相關(guān)資料,在Spring Boot中實(shí)現(xiàn)文件上傳下載功能相對簡單,文中給出了代碼示例,需要的朋友可以參考下
    2023-09-09
  • SpringBoot Redisson 集成的實(shí)現(xiàn)示例

    SpringBoot Redisson 集成的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot Redisson 集成的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • java中this的n種使用方法

    java中this的n種使用方法

    this可能是幾乎所有有一點(diǎn)面向?qū)ο笏枷氲恼Z言都會引用到的變量,this有多少種用法。下面小編給大家?guī)砹薺ava中this的n種使用方法,感興趣的朋友一起看看吧
    2018-08-08
  • Java內(nèi)部類及其特點(diǎn)的講解

    Java內(nèi)部類及其特點(diǎn)的講解

    今天小編就為大家分享一篇關(guān)于Java內(nèi)部類及其特點(diǎn)的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論

兴义市| 沁阳市| 镇沅| 隆子县| 宾阳县| 信丰县| 和顺县| 庄河市| 东源县| 浑源县| 衡阳县| 中超| 新邵县| 大竹县| 宁城县| 仙桃市| 望江县| 集安市| 梁山县| 张北县| 焉耆| 临安市| 永安市| 永康市| 开阳县| 临夏县| 滦南县| 邻水| 呼伦贝尔市| 莒南县| 庆云县| 皋兰县| 页游| 邵阳市| 吉林市| 清水河县| 都江堰市| 社旗县| 金堂县| 凌源市| 宕昌县|