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

JDK12的新特性之teeing collectors

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

簡(jiǎn)介

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

talk is cheap, show me the code

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

各大網(wǎng)站上的例子都喜歡舉maxBy和minBy的例子,我這里偏不,下面舉一個(gè)統(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);
  }

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

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

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

Teeing方法深度剖析

作為一個(gè)有追求的程序員,不深入了解下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返回一個(gè)Collector。Collector是一個(gè)Reduction operations。它將輸入的元素經(jīng)過(guò)累計(jì)之后轉(zhuǎn)換成為一個(gè)結(jié)果集合。

我們?cè)倏匆幌翪ollector接口的定義:

public interface Collector<T, A, R> 

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

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

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

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

Characteristics

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

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

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

如果Characteristics是CONCURRENT,則表示Collector會(huì)處理多線程的問(wèn)題,而不需要Stream API來(lái)考慮。

因?yàn)門(mén)方法的前面兩個(gè)參數(shù)是Collector,并且最后也返回一個(gè)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)容請(qǐng)搜索腳本之家以前的文章或繼續(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)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07
  • SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊(cè)中心的方法

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

    本文主要介紹了SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊(cè)中心,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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格式化問(wèn)題

    java8之LocalDate的使用、LocalDate格式化問(wèn)題

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

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

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

    如何使用JFrame完成動(dòng)態(tài)模擬時(shí)鐘

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

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

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

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

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

    java中this的n種使用方法

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

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

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

最新評(píng)論

临安市| 资源县| 龙口市| 祁阳县| 饶平县| 临桂县| 广州市| 神池县| 兴海县| 琼海市| 舞钢市| 沙洋县| 武强县| 志丹县| 甘洛县| 汤原县| 西城区| 类乌齐县| 湾仔区| 黔西| 叶城县| 淮滨县| 高尔夫| 白玉县| 寿光市| 兴隆县| 遂川县| 石林| 洛宁县| 金秀| 仙居县| 精河县| 太谷县| 崇仁县| 霍城县| 五台县| 福州市| 武定县| 榆树市| 武平县| 湖北省|