Java的Integer類型歸約方法是什么-創新互聯

本篇內容介紹了“Java的Integer類型歸約方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

創新互聯公司是一家專業提供宜春企業網站建設,專注與做網站、成都網站設計、成都h5網站建設、小程序制作等業務。10年已為宜春眾多企業、政府機構等服務。創新互聯專業網站制作公司優惠進行中。

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

  • Identity標識:一個元素,它是歸約操作的初始值,如果流為空,則為默認結果。

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

  • Combiner合并器(可選):當歸約并行化時,或當累加器參數的類型與累加器實現的類型不匹配時,用于合并歸約操作的部分結果的函數。
    我們先來理解累加器:

  • 階段累加結果作為累加器的第一個參數

  • 集合遍歷元素作為累加器的第二個參數

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類型,只要累加器參數類型能夠匹配,可以對任何類型的集合進行歸約計算。

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

復雜對象歸約

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

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函數實現類型轉換后的集合歸約,我們還可以用Combiner合并器來實現,這里第一次使用到了Combiner合并器。因為Stream流中的元素是Employee,累加器的返回值是Integer,所以二者的類型不匹配。這種情況下可以使用Combiner合并器對累加器的結果進行二次歸約,相當于做了類型轉換。

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

計算結果和使用map進行數據類型轉換的方式是一樣的。

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

對于大數據量的集合元素歸約計算,更能體現出Stream并行流計算的威力。

Java的Integer類型歸約方法是什么

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

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

System.out.println(total); //346

“Java的Integer類型歸約方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯-成都網站建設公司網站,小編將為大家輸出更多高質量的實用文章!

名稱欄目:Java的Integer類型歸約方法是什么-創新互聯
本文路徑:http://m.kartarina.com/article2/ccjdic.html

成都網站建設公司_創新互聯,為您提供建站公司全網營銷推廣網站內鏈ChatGPT商城網站小程序開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站托管運營
主站蜘蛛池模板: 91久久九九无码成人网站| 亚洲男人第一无码aⅴ网站| 日韩精品久久无码中文字幕| 国产激情无码一区二区三区| 国产在线无码不卡影视影院| 日韩人妻无码精品久久免费一| 日韩aⅴ人妻无码一区二区 | 国产真人无码作爱免费视频| 成人午夜精品无码区久久| 亚洲va成无码人在线观看| 久久久精品无码专区不卡| 亚洲av无码无线在线观看| 日韩人妻精品无码一区二区三区| 精品无码久久久久久久动漫| 亚洲av无码一区二区三区四区| 熟妇无码乱子成人精品| 亚洲乱亚洲乱妇无码麻豆| 无码精品前田一区二区| 亚洲精品9999久久久久无码| 亚洲精品无码成人片在线观看| 亚洲av永久无码精品漫画| 少妇无码?V无码专区在线观看| 亚洲av无码兔费综合| 99久久人妻无码精品系列 | 免费无码又爽又刺激网站直播| 亚洲另类无码一区二区三区| 免费无码VA一区二区三区| 亚洲精品无码MV在线观看| 国模无码人体一区二区| 中文字幕人妻无码专区| 人妻AV中出无码内射| 亚洲精品无码永久在线观看你懂的| 永久免费无码网站在线观看个| 曰韩无码二三区中文字幕| 精品久久久无码人妻字幂| 免费A级毛片无码A∨男男| 黑人无码精品又粗又大又长 | 高h纯肉无码视频在线观看| 中文有无人妻vs无码人妻激烈 | 久久精品aⅴ无码中文字字幕不卡| 亚洲国产成人片在线观看无码 |