日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Java8如何進(jìn)行stream,reduce,collection操作

 一、概念介紹

創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元策勒做網(wǎng)站,已為上家服務(wù),為策勒各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

在java8 JDK包含許多聚合操作(如平均值,總和,最小,***,和計(jì)數(shù)),返回一個(gè)計(jì)算流stream的聚合結(jié)果。這些聚合操作被稱為聚合操作。JDK除返回單個(gè)值的聚合操作外,還有很多聚合操作返回一個(gè)collection集合實(shí)例。很多的reduce操作執(zhí)行特定的任務(wù),如求平均值或按類別分組元素。

JDK提供的通用的聚合操作:Stream.reduce,Stream.collection

注意:本文將reduction operations翻譯為聚合操作,因?yàn)閞eduction operations通常用于匯聚統(tǒng)計(jì)。

兩者的區(qū)別:

Stream.reduce,常用的方法有average, sum, min, max, and count,返回單個(gè)的結(jié)果值,并且reduce操作每處理一個(gè)元素總是創(chuàng)建一個(gè)新值

Stream.collection與stream.reduce方法不同,Stream.collect修改現(xiàn)存的值,而不是每處理一個(gè)元素,創(chuàng)建一個(gè)新值

二、源代碼

 
 
  1. package lambda; 
  2.  
  3. import java.util.Arrays; 
  4. import java.util.List; 
  5. import java.util.Map; 
  6. import java.util.stream.Collectors; 
  7.  
  8. public class LambdaMapReduce { 
  9.     private static List users = Arrays.asList( 
  10.             new User(1, "張三", 12,User.Sex.MALE),  
  11.             new User(2, "李四", 21, User.Sex.FEMALE),  
  12.             new User(3,"王五", 32, User.Sex.MALE),  
  13.             new User(4, "趙六", 32, User.Sex.FEMALE)); 
  14.  
  15.     public static void main(String[] args) { 
  16.         reduceAvg(); 
  17.         reduceSum(); 
  18.  
  19.          
  20.         //與stream.reduce方法不同,Stream.collect修改現(xiàn)存的值,而不是每處理一個(gè)元素,創(chuàng)建一個(gè)新值 
  21.         //獲取所有男性用戶的平均年齡 
  22.         Averager averageCollect = users.parallelStream() 
  23.                 .filter(p -> p.getGender() == User.Sex.MALE) 
  24.                 .map(User::getAge) 
  25.                 .collect(Averager::new, Averager::accept, Averager::combine); 
  26.  
  27.         System.out.println("Average age of male members: " 
  28.                 + averageCollect.average()); 
  29.  
  30.         //獲取年齡大于12的用戶列表 
  31.         List list = users.parallelStream().filter(p -> p.age > 12) 
  32.                 .collect(Collectors.toList()); 
  33.         System.out.println(list); 
  34.  
  35.         //按性別統(tǒng)計(jì)用戶數(shù) 
  36.         Map map = users.parallelStream().collect( 
  37.                 Collectors.groupingBy(User::getGender, 
  38.                         Collectors.summingInt(p -> 1))); 
  39.         System.out.println(map); 
  40.  
  41.         //按性別獲取用戶名稱 
  42.         Map> map2 = users.stream() 
  43.                 .collect( 
  44.                         Collectors.groupingBy( 
  45.                                 User::getGender, 
  46.                                 Collectors.mapping(User::getName, 
  47.                                         Collectors.toList()))); 
  48.         System.out.println(map2); 
  49.          
  50.         //按性別求年齡的總和 
  51.         Map map3 = users.stream().collect( 
  52.                 Collectors.groupingBy(User::getGender, 
  53.                         Collectors.reducing(0, User::getAge, Integer::sum))); 
  54.  
  55.         System.out.println(map3); 
  56.          
  57.         //按性別求年齡的平均值 
  58.         Map map4 = users.stream().collect( 
  59.                 Collectors.groupingBy(User::getGender, 
  60.                         Collectors.averagingInt(User::getAge))); 
  61.         System.out.println(map4); 
  62.  
  63.     } 
  64.  
  65.     // 注意,reduce操作每處理一個(gè)元素總是創(chuàng)建一個(gè)新值, 
  66.     // Stream.reduce適用于返回單個(gè)結(jié)果值的情況 
  67.     //獲取所有用戶的平均年齡 
  68.     private static void reduceAvg() { 
  69.         // mapToInt的pipeline后面可以是average,max,min,count,sum 
  70.         double avg = users.parallelStream().mapToInt(User::getAge)  
  71.                 .average().getAsDouble(); 
  72.  
  73.         System.out.println("reduceAvg User Age: " + avg); 
  74.     } 
  75.  
  76.     //獲取所有用戶的年齡總和 
  77.     private static void reduceSum() { 
  78.         double sum = users.parallelStream().mapToInt(User::getAge) 
  79.                 .reduce(0, (x, y) -> x + y); // 可以簡(jiǎn)寫為.sum() 
  80.  
  81.         System.out.println("reduceSum User Age: " + sum); 
  82.     } 

三、參考

http://docs.oracle.com/javase/tutorial/collections/streams/reduction.html


本文名稱:Java8如何進(jìn)行stream,reduce,collection操作
文章分享:http://www.dlmjj.cn/article/djspjpp.html