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

java理論基礎(chǔ)Stream?reduce實現(xiàn)集合元素歸約

 更新時間:2022年03月16日 14:52:17   作者:字母哥哥  
這篇文章主要為大家介紹了java理論基礎(chǔ)Stream?reduce實現(xiàn)集合元素歸約示例詳解有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

Stream API為我們提供了Stream.reduce用來實現(xiàn)集合元素的歸約。reduce函數(shù)有三個參數(shù):

Identity標(biāo)識:一個元素,它是歸約操作的初始值,如果流為空,則為默認結(jié)果。

Accumulator累加器:具有兩個參數(shù)的函數(shù):歸約運算的部分結(jié)果和流的下一個元素。

Combiner合并器(可選):當(dāng)歸約并行化時,或當(dāng)累加器參數(shù)的類型與累加器實現(xiàn)的類型不匹配時,用于合并歸約操作的部分結(jié)果的函數(shù)。

注意觀察上面的圖,我們先來理解累加器:

階段累加結(jié)果作為累加器的第一個參數(shù)

集合遍歷元素作為累加器的第二個參數(shù)

Integer類型歸約

reduce初始值為0,累加器可以是lambda表達式,也可以是方法引用。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int result = numbers
        .stream()
        .reduce(0, (subtotal, element) -> subtotal + element);
System.out.println(result);  //21

int result = numbers
        .stream()
        .reduce(0, Integer::sum);
System.out.println(result); //21

String類型歸約

不僅可以歸約Integer類型,只要累加器參數(shù)類型能夠匹配,可以對任何類型的集合進行歸約計算。

List<String> letters = Arrays.asList("a", "b", "c", "d", "e");
String result = letters
        .stream()
        .reduce("", (partialString, element) -> partialString + element);
System.out.println(result);  //abcde
String result = letters
        .stream()
        .reduce("", String::concat);
System.out.println(result);  //ancde

復(fù)雜對象歸約

計算所有的員工的年齡總和。

Employee e1 = new Employee(1,23,"M","Rick","Beethovan");
Employee e2 = new Employee(2,13,"F","Martina","Hengis");
Employee e3 = new Employee(3,43,"M","Ricky","Martin");
Employee e4 = new Employee(4,26,"M","Jon","Lowman");
Employee e5 = new Employee(5,19,"F","Cristine","Maria");
Employee e6 = new Employee(6,15,"M","David","Feezor");
Employee e7 = new Employee(7,68,"F","Melissa","Roy");
Employee e8 = new Employee(8,79,"M","Alex","Gussin");
Employee e9 = new Employee(9,15,"F","Neetu","Singh");
Employee e10 = new Employee(10,45,"M","Naveen","Jain");
List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);
Integer total = employees.stream().map(Employee::getAge).reduce(0,Integer::sum);
System.out.println(total); //346

先用map將Stream流中的元素由Employee類型處理為Integer類型(age)。

然后對Stream流中的Integer類型進行歸約

Combiner合并器的使用

除了使用map函數(shù)實現(xiàn)類型轉(zhuǎn)換后的集合歸約,我們還可以用Combiner合并器來實現(xiàn),這里第一次使用到了Combiner合并器。 因為Stream流中的元素是Employee,累加器的返回值是Integer,所以二者的類型不匹配。這種情況下可以使用Combiner合并器對累加器的結(jié)果進行二次歸約,相當(dāng)于做了類型轉(zhuǎn)換。

Integer total3 = employees.stream()
        .reduce(0,(totalAge,emp) -> totalAge + emp.getAge(),Integer::sum); //注意這里reduce方法有三個參數(shù)
System.out.println(total); //346

計算結(jié)果和使用map進行數(shù)據(jù)類型轉(zhuǎn)換的方式是一樣的。

并行流數(shù)據(jù)歸約(使用合并器)

對于大數(shù)據(jù)量的集合元素歸約計算,更能體現(xiàn)出Stream并行流計算的威力。

在進行并行流計算的時候,可能會將集合元素分成多個組計算。為了更快的將分組計算結(jié)果累加,可以使用合并器。

Integer total2 = employees
        .parallelStream()
        .map(Employee::getAge)
        .reduce(0,Integer::sum,Integer::sum);  //注意這里reduce方法有三個參數(shù)
System.out.println(total); //346

以上就是java理論基礎(chǔ)Stream reduce實現(xiàn)集合元素歸約的詳細內(nèi)容,更多關(guān)于java Stream reduce集合元素歸約的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

    Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

    今天帶小伙伴們學(xué)習(xí)一下Java并發(fā)編程之Java ConcurrentLinkedQueue源碼,本篇文章詳細分析了ConcurrentLinkedQueue源碼,有代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • Springboot+Netty+Websocket實現(xiàn)消息推送實例

    Springboot+Netty+Websocket實現(xiàn)消息推送實例

    這篇文章主要介紹了Springboot+Netty+Websocket實現(xiàn)消息推送實例,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Java中Future、FutureTask原理以及與線程池的搭配使用

    Java中Future、FutureTask原理以及與線程池的搭配使用

    這篇文章主要為大家詳細介紹了Java中Future、FutureTask原理以及與線程池的搭配使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JAVA編程不能不知道的反射用法總結(jié)

    JAVA編程不能不知道的反射用法總結(jié)

    這篇文章主要介紹了Java反射技術(shù)原理與用法,結(jié)合實例形式分析了Java反射技術(shù)的基本概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2021-07-07
  • java數(shù)組實現(xiàn)隊列及環(huán)形隊列實現(xiàn)過程解析

    java數(shù)組實現(xiàn)隊列及環(huán)形隊列實現(xiàn)過程解析

    這篇文章主要介紹了java數(shù)組實現(xiàn)隊列及環(huán)形隊列實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 如何手動安裝Gradle并配置IDEA使用Gradle構(gòu)建

    如何手動安裝Gradle并配置IDEA使用Gradle構(gòu)建

    本文給大家分享手動安裝Gradle并配置IDEA使用Gradle構(gòu)建的步驟,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-04-04
  • Java中的信號量Semaphore詳細解讀

    Java中的信號量Semaphore詳細解讀

    這篇文章主要介紹了Java中的信號量Semaphore詳細解讀,Java信號量機制可以用來保證線程互斥,創(chuàng)建Semaphore對象傳入一個整形參數(shù),類似于公共資源,需要的朋友可以參考下
    2023-11-11
  • SpringBoot集成Devtools實現(xiàn)熱更新

    SpringBoot集成Devtools實現(xiàn)熱更新

    DevTools是開發(fā)者工具集,主要用于簡化開發(fā)過程中的熱部署問題,熱部署是指在開發(fā)過程中,當(dāng)代碼發(fā)生變化時,無需手動重啟應(yīng)用,系統(tǒng)能夠自動檢測并重新加載修改后的代碼,本文給大家介紹了SpringBoot集成Devtools實現(xiàn)熱更新,需要的朋友可以參考下
    2024-08-08
  • SpringBoot開發(fā)教程之AOP日志處理

    SpringBoot開發(fā)教程之AOP日志處理

    現(xiàn)在凡是企業(yè)級的或者稍微大點項目,基本都需要日志管理,下面這篇文章主要給大家介紹了關(guān)于SpringBoot開發(fā)教程之AOP日志處理 的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 使用注解@Validated和BindingResult對入?yún)⑦M行非空校驗方式

    使用注解@Validated和BindingResult對入?yún)⑦M行非空校驗方式

    這篇文章主要介紹了使用注解@Validated和BindingResult對入?yún)⑦M行非空校驗方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

项城市| 临高县| 泽州县| 丁青县| 钟山县| 龙岩市| 大田县| 通化市| 海晏县| 崇信县| 淄博市| 汾西县| 田阳县| 大兴区| 潼南县| 仙居县| 汽车| 阳泉市| 沙洋县| 赞皇县| 开平市| 故城县| 奉新县| 德令哈市| 东山县| 靖远县| 竹溪县| 天全县| 塘沽区| 抚松县| 林甸县| 浠水县| 炎陵县| 思茅市| 丰城市| 望城县| 平乐县| 英德市| 田林县| 临澧县| 全州县|