欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JDK12的新特性之teeing collectors

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

簡介

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

talk is cheap, show me the code

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

各大網(wǎng)站上的例子都喜歡舉maxBy和minBy的例子,我這里偏不,下面舉一個統(tǒng)計學生平均分數(shù)和總分數(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);
  }

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

我們看下輸出結果:

[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)過累計之后轉換成為一個結果集合。

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

public interface Collector<T, A, R> 

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

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

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

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

Characteristics

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

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

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

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

因為T方法的前面兩個參數(shù)是Collector,并且最后也返回一個Collector。

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

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

總結

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

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

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

相關文章

  • 解決使用IDEA時跳轉到.class的問題

    解決使用IDEA時跳轉到.class的問題

    這篇文章主要介紹了解決使用IDEA時跳轉到.class的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA自定義注解實現(xiàn)接口/ip限流的示例代碼

    JAVA自定義注解實現(xiàn)接口/ip限流的示例代碼

    本文主要介紹了JAVA自定義注解實現(xiàn)接口/ip限流的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • 淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

    淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

    這篇文章主要介紹了Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • java多線程模擬交通燈管理系統(tǒng)

    java多線程模擬交通燈管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java多線程模擬交通燈管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java中的注解、元注解詳細解析

    Java中的注解、元注解詳細解析

    這篇文章主要介紹了Java中的注解、元注解詳細解析,注解也叫元數(shù)據(jù),與類、接口、枚舉是在同一個層次,它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來對這些元素進行說明,注釋,需要的朋友可以參考下
    2023-11-11
  • Java多線程的臨界資源問題解決方案

    Java多線程的臨界資源問題解決方案

    這篇文章主要介紹了Java多線程的臨界資源問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 如何創(chuàng)建SpringBoot項目

    如何創(chuàng)建SpringBoot項目

    這篇文章主要介紹了如何創(chuàng)建SpringBoot項目,幫助大家更好的學習和使用springboot框架,感興趣的朋友可以了解下
    2021-01-01
  • java操作gaussDB數(shù)據(jù)庫的實現(xiàn)示例

    java操作gaussDB數(shù)據(jù)庫的實現(xiàn)示例

    本文主要介紹了java操作gaussDB數(shù)據(jù)庫的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • springboot中的css樣式顯示不出了的幾種情況

    springboot中的css樣式顯示不出了的幾種情況

    這篇文章主要介紹了springboot中的css樣式顯示不出了的幾種情況,具有很好的的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring Cloud 整合Apache-SkyWalking實現(xiàn)鏈路跟蹤的方法

    Spring Cloud 整合Apache-SkyWalking實現(xiàn)鏈路跟蹤的方法

    這篇文章主要介紹了Spring Cloud 整合Apache-SkyWalking鏈路跟蹤的示例代碼,代碼簡單易懂,通過圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論