Lambda的reduce元素规约
規(guī)約:大致可以理解為將一個數(shù)組或集合轉(zhuǎn)換成一個String或integer類型的一個對象。最終只拿到一個結(jié)果。
關(guān)鍵字:reduce
語法:reduce(a,(b,c)->{b+c});
- a:規(guī)約初始值
- b:階段性的累加結(jié)果
- c:當前遍歷的元素
若是整數(shù)類型求和 (Integer),b和c 可換成方法引用 Integer::sum
?
?
?
先回顧一下map: stream().map 可以把數(shù)組中的元素從一種類型轉(zhuǎn)換成另一種類型,也可以將多類型的集合變成單純的只有一種類型的集合。
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}}規(guī)約并行:
我們都知道,stream()是可以并行的。就是可以充分利用cpu核數(shù)發(fā)揮cpu運行的最大效率。
并行關(guān)鍵字:parallelStream()
?
以上圖所示,并行會對過程分組計算,之后得出兩組,一個三,一個七,之后使用合并器,對兩組結(jié)果進行累加計算得出最后結(jié)果。所謂合并器,就是對并行的每組結(jié)果進行累加。
Integer reduce2 = list.parallelStream().map(People::getAge).reduce(0, Integer::sum,Integer::sum); System.out.println(reduce2); //105上面reduce第三個參數(shù) Integer::sum 就是合并器
如果數(shù)據(jù)量較大時推薦使用parallelStream()并行運算,可以充分發(fā)揮cpu性能,提高運行效率。
?
Integer red = list.stream().reduce(0, (a, people) -> a + people.getAge(), Integer::sum); System.out.println(red);//105上面的reduce第三個參數(shù)就是合并器的第二個功能了: 當返回結(jié)果不一致時可以用合并器進行一個轉(zhuǎn)型。
?
綜上:
當對數(shù)組進行累加操作時推薦使用規(guī)約。尤其推薦并行規(guī)約。
合并器:
- 對并行的累加結(jié)果進行最后統(tǒng)計
- 對于每組結(jié)果類型不一致時進行累加后轉(zhuǎn)型
?
總結(jié)
以上是生活随笔為你收集整理的Lambda的reduce元素规约的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Grails 2.3.X中使用sass
- 下一篇: 计算机组和用户组,计算机管理本地用户和组