文档库 最新最全的文档下载
当前位置:文档库 › Java8如何进行stream,reduce,collection操作

Java8如何进行stream,reduce,collection操作

Java8如何进行stream,reduce,collection操作
Java8如何进行stream,reduce,collection操作

Java8如何进行stream,reduce,collection操作

在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果。这些聚合操作被称为聚合操作。JDK除返回单个值的聚合操作外,还有很多聚合操作返回一个collection集合实例。

AD:

一、概念介绍

在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果。这些聚合操作被称为聚合操作。JDK除返回单个值的聚合操作外,还有很多聚合操作返回一个collection集合实例。很多的reduce操作执行特定的任务,如求平均值或按类别分组元素。

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

注意:本文将reduction operations翻译为聚合操作,因为reduction operations通常用于汇聚统计。

两者的区别:

Stream.reduce,常用的方法有average, sum, min, max, and count,返回单个的结果值,并且reduce操作每处理一个元素总是创建一个新值

Stream.collection与stream.reduce方法不同,Stream.collect修改现存的值,而不是每处理一个元素,创建一个新值

二、源代码

packagelambda;importjava.util.Arrays;importjava.util.List;importjava.util.Map;im portjava.util.stream.Collectors;publicclassLambdaMapReduce{privatestaticList User users=Arrays.asList(newUser(1, 张三,12,User.Sex.MALE),newUser(2, 李四,21,User.Sex.FEMALE),newUser(3, 王五,32,User.Sex.MALE),newUser(4, 赵六 ,32,User.Sex.FEMALE));publicstaticvoidmain(String[]args){reduceAvg();reduceSu m();与stream.reduce方法不同,Stream.collect修改现存的值,而不是每处理一个元素,创建一个新值获取所有男性用户的平均年龄AverageraverageCollect=users.parallelStream().filter(p-

p.getGender()==User.Sex.MALE).map(User::getAge).collect(Averager::new,Averager:: accept,Averager::combine);System.out.println( Averageageofmalemembers: +averageCollect.average());获取年龄大于12的用户列表List User list=users.parallelStream().filter(p- p.age 12).collect(Collectors.toList());System.out.println(list);按性别统计用户数Map User.Sex,Integer

map=users.parallelStream().collect(Collectors.groupingBy(User::getGender,Collect ors.summingInt(p- 1)));System.out.println(map);按性别获取用户名称Map User.Sex,List String map2=users.stream().collect(Collectors.groupingBy(User::getGender,Collectors.map ping(User::getName,Collectors.toList())));System.out.println(map2);按性别求年龄的总和Map User.Sex,Integer map3=users.stream().collect(Collectors.groupingBy(User::getGender,Collectors.red ucing(0,User::getAge,Integer::sum)));System.out.println(map3);按性别求年龄的平均值Map User.Sex,Double map4=users.stream().collect(Collectors.groupingBy(User::getGender,Collectors.ave ragingInt(User::getAge)));System.out.println(map4);}注意,reduce操作每处理一个元

素总是创建一个新值,Stream.reduce适用于返回单个结果值的情况获取所有用户的平均年龄privatestaticvoidreduceAvg(){mapToInt的pipeline后面可以是average,max,min,count,sumdoubleavg=users.parallelStream().mapToInt(User::getAge) .average().getAsDouble();System.out.println( reduceAvgUserAge: +avg);}获取所有用户的年龄总和privatestaticvoidreduceSum(){doublesum=users.parallelStream().mapToInt(User::get Age).reduce(0,(x,y)- x+y);可以简写为.sum()System.out.println( reduceSumUserAge: +sum);}}

三、参考

javasetutorialcollectionsstreamsreduction.html

原文链接:cloudcoderblog215169

【编辑推荐】Java8 和 Scala 中的高阶函数使用 IBM InfoSphere Streams 进行模拟编程没有银弹:探讨Java8新增特性的优缺点Java8使用Map中的computeIfAbsent方法构建本地缓存Java8 default methods 默认方法的概念与代码解析【责任编辑:林师授 TEL:(010)68476606】

软件设计师考试全真模拟试题及解析

本书是按照全国计算机技术与软件专业技术资格(水平)考试《软件设计师考试大纲》的要求,参照《软件设计师教程》及近年来考试试

相关文档