Lambda的reduce元素规约
生活随笔
收集整理的這篇文章主要介紹了
Lambda的reduce元素规约
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
規約:大致可以理解為將一個數組或集合轉換成一個String或integer類型的一個對象。最終只拿到一個結果。
關鍵字:reduce
語法:reduce(a,(b,c)->{b+c});
- a:規約初始值
- b:階段性的累加結果
- c:當前遍歷的元素
若是整數類型求和 (Integer),b和c 可換成方法引用 Integer::sum
?
?
?
先回顧一下map: stream().map 可以把數組中的元素從一種類型轉換成另一種類型,也可以將多類型的集合變成單純的只有一種類型的集合。
public class Reduce {public static void main(String[] args) {People p=new People("小明",19,"man");People p2=new People("小花",16,"man");People p3=new People("小剛",17,"man");People p4=new People("小龍",15,"man");People p5=new People("小新",20,"man");People p6=new People("小舞",18,"woman");List<People> list =new ArrayList<>();list.add(p);list.add(p2);list.add(p3);list.add(p4);list.add(p5);list.add(p6);Integer res = list.stream().map(People::getAge).reduce(0,(a,b)->a+b);System.out.println(res);//105Integer reduce = list.stream().map(People::getAge).reduce(0, Integer::sum);System.out.println(reduce); //105}}規約并行:
我們都知道,stream()是可以并行的。就是可以充分利用cpu核數發揮cpu運行的最大效率。
并行關鍵字:parallelStream()
?
以上圖所示,并行會對過程分組計算,之后得出兩組,一個三,一個七,之后使用合并器,對兩組結果進行累加計算得出最后結果。所謂合并器,就是對并行的每組結果進行累加。
Integer reduce2 = list.parallelStream().map(People::getAge).reduce(0, Integer::sum,Integer::sum); System.out.println(reduce2); //105上面reduce第三個參數 Integer::sum 就是合并器
如果數據量較大時推薦使用parallelStream()并行運算,可以充分發揮cpu性能,提高運行效率。
?
Integer red = list.stream().reduce(0, (a, people) -> a + people.getAge(), Integer::sum); System.out.println(red);//105上面的reduce第三個參數就是合并器的第二個功能了: 當返回結果不一致時可以用合并器進行一個轉型。
?
綜上:
當對數組進行累加操作時推薦使用規約。尤其推薦并行規約。
合并器:
- 對并行的累加結果進行最后統計
- 對于每組結果類型不一致時進行累加后轉型
?
總結
以上是生活随笔為你收集整理的Lambda的reduce元素规约的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Grails 2.3.X中使用sass
- 下一篇: 计算机组和用户组,计算机管理本地用户和组