本篇內(nèi)容介紹了“Java的Integer類型歸約方法是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供宜春企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為宜春眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。Stream API為我們提供了Stream.reduce用來(lái)實(shí)現(xiàn)集合元素的歸約。reduce函數(shù)有三個(gè)參數(shù):
Identity標(biāo)識(shí):一個(gè)元素,它是歸約操作的初始值,如果流為空,則為默認(rèn)結(jié)果。
Accumulator累加器:具有兩個(gè)參數(shù)的函數(shù):歸約運(yùn)算的部分結(jié)果和流的下一個(gè)元素。
Combiner合并器(可選):當(dāng)歸約并行化時(shí),或當(dāng)累加器參數(shù)的類型與累加器實(shí)現(xiàn)的類型不匹配時(shí),用于合并歸約操作的部分結(jié)果的函數(shù)。
我們先來(lái)理解累加器:
階段累加結(jié)果作為累加器的第一個(gè)參數(shù)
集合遍歷元素作為累加器的第二個(gè)參數(shù)
reduce初始值為0,累加器可以是lambda表達(dá)式,也可以是方法引用。
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
不僅可以歸約Integer類型,只要累加器參數(shù)類型能夠匹配,可以對(duì)任何類型的集合進(jìn)行歸約計(jì)算。
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
計(jì)算所有的員工的年齡總和。
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)。
然后對(duì)Stream流中的Integer類型進(jìn)行歸約
除了使用map函數(shù)實(shí)現(xiàn)類型轉(zhuǎn)換后的集合歸約,我們還可以用Combiner合并器來(lái)實(shí)現(xiàn),這里第一次使用到了Combiner合并器。因?yàn)镾tream流中的元素是Employee,累加器的返回值是Integer,所以二者的類型不匹配。這種情況下可以使用Combiner合并器對(duì)累加器的結(jié)果進(jìn)行二次歸約,相當(dāng)于做了類型轉(zhuǎn)換。
Integer total3 = employees.stream()
.reduce(0,(totalAge,emp) -> totalAge + emp.getAge(),Integer::sum);
//注意這里reduce方法有三個(gè)參數(shù)
System.out.println(total);
//346
計(jì)算結(jié)果和使用map進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的方式是一樣的。
對(duì)于大數(shù)據(jù)量的集合元素歸約計(jì)算,更能體現(xiàn)出Stream并行流計(jì)算的威力。
在進(jìn)行并行流計(jì)算的時(shí)候,可能會(huì)將集合元素分成多個(gè)組計(jì)算。為了更快的將分組計(jì)算結(jié)果累加,可以使用合并器。
Integer total2 = employees
.parallelStream()
.map(Employee::getAge)
.reduce(0,Integer::sum,Integer::sum); //注意這里reduce方法有三個(gè)參數(shù)
System.out.println(total);
//346
“Java的Integer類型歸約方法是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
名稱欄目:Java的Integer類型歸約方法是什么-創(chuàng)新互聯(lián)
本文路徑:http://www.rwnh.cn/article2/ccjdic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、全網(wǎng)營(yíng)銷推廣、網(wǎng)站內(nèi)鏈、ChatGPT、商城網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容