新聞中心
一、概念介紹

創(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è)新值
二、源代碼
- package lambda;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- import java.util.stream.Collectors;
- public class LambdaMapReduce {
- private static List
users = Arrays.asList( - new User(1, "張三", 12,User.Sex.MALE),
- new User(2, "李四", 21, User.Sex.FEMALE),
- new User(3,"王五", 32, User.Sex.MALE),
- new User(4, "趙六", 32, User.Sex.FEMALE));
- public static void main(String[] args) {
- reduceAvg();
- reduceSum();
- //與stream.reduce方法不同,Stream.collect修改現(xiàn)存的值,而不是每處理一個(gè)元素,創(chuàng)建一個(gè)新值
- //獲取所有男性用戶的平均年齡
- Averager averageCollect = users.parallelStream()
- .filter(p -> p.getGender() == User.Sex.MALE)
- .map(User::getAge)
- .collect(Averager::new, Averager::accept, Averager::combine);
- System.out.println("Average age of male members: "
- + averageCollect.average());
- //獲取年齡大于12的用戶列表
- List
list = users.parallelStream().filter(p -> p.age > 12) - .collect(Collectors.toList());
- System.out.println(list);
- //按性別統(tǒng)計(jì)用戶數(shù)
- Map
map = users.parallelStream().collect( - Collectors.groupingBy(User::getGender,
- Collectors.summingInt(p -> 1)));
- System.out.println(map);
- //按性別獲取用戶名稱
- Map
> map2 = users.stream() - .collect(
- Collectors.groupingBy(
- User::getGender,
- Collectors.mapping(User::getName,
- Collectors.toList())));
- System.out.println(map2);
- //按性別求年齡的總和
- Map
map3 = users.stream().collect( - Collectors.groupingBy(User::getGender,
- Collectors.reducing(0, User::getAge, Integer::sum)));
- System.out.println(map3);
- //按性別求年齡的平均值
- Map
map4 = users.stream().collect( - Collectors.groupingBy(User::getGender,
- Collectors.averagingInt(User::getAge)));
- System.out.println(map4);
- }
- // 注意,reduce操作每處理一個(gè)元素總是創(chuàng)建一個(gè)新值,
- // Stream.reduce適用于返回單個(gè)結(jié)果值的情況
- //獲取所有用戶的平均年齡
- private static void reduceAvg() {
- // mapToInt的pipeline后面可以是average,max,min,count,sum
- double avg = users.parallelStream().mapToInt(User::getAge)
- .average().getAsDouble();
- System.out.println("reduceAvg User Age: " + avg);
- }
- //獲取所有用戶的年齡總和
- private static void reduceSum() {
- double sum = users.parallelStream().mapToInt(User::getAge)
- .reduce(0, (x, y) -> x + y); // 可以簡(jiǎn)寫為.sum()
- System.out.println("reduceSum User Age: " + sum);
- }
- }
三、參考
http://docs.oracle.com/javase/tutorial/collections/streams/reduction.html
本文名稱:Java8如何進(jìn)行stream,reduce,collection操作
文章分享:http://www.dlmjj.cn/article/djspjpp.html


咨詢
建站咨詢
