在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修改现存的值,而不是每处理一个元素,创建一个新值

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<User> 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修改现存的值,而不是每处理一个元素,创建一个新值 //获取所有男性用户的平均年龄 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<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, Collectors.summingInt(p -> 1))); System.out.println(map); //按性别获取用户名称 Map<User.Sex, List<String>> map2 = users.stream() .collect( Collectors.groupingBy( User::getGender, Collectors.mapping(User::getName, Collectors.toList()))); System.out.println(map2); //按性别求年龄的总和 Map<User.Sex, Integer> map3 = users.stream().collect( Collectors.groupingBy(User::getGender, Collectors.reducing(0, User::getAge, Integer::sum))); System.out.println(map3); //按性别求年龄的平均值 Map<User.Sex, Double> map4 = users.stream().collect( Collectors.groupingBy(User::getGender, Collectors.averagingInt(User::getAge))); System.out.println(map4); } // 注意,reduce操作每处理一个元素总是创建一个新值, // Stream.reduce适用于返回单个结果值的情况 //获取所有用户的平均年龄 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); // 可以简写为.sum()
 System.out.println("reduceSum User Age: " + sum); }
}

转载于:https://www.cnblogs.com/Struts-pring/p/9754445.html

JDK1.8聚合操作相关推荐

  1. 2021年大数据常用语言Scala(二十七):函数式编程 聚合操作

    目录 聚合操作 聚合  reduce 定义 案例 折叠  fold 定义 案例 聚合操作 聚合操作,可以将一个列表中的数据合并为一个.这种操作经常用来统计分析中 聚合  reduce reduce表示 ...

  2. mongodb的聚合操作

    mongodb的聚合操作 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组.过滤等功 ...

  3. python和R对dataframe的分组聚合操作:dplyr、groupby、agg、group_by、nunique、reset_index、rename、summarise、n_distinct

    python和R对dataframe的分组聚合操作:dplyr.groupby.agg.group_by.nunique.reset_index.rename.summarise.n_distinct ...

  4. elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg...

    分析 最后,我们还有一个需求需要完成:允许管理者在职员目录中进行一些分析. Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计.它很像SQL中 ...

  5. OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念...

    先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作! 转自:http://blog.sina.com.c ...

  6. MongoDB 聚合操作

    MongoDB 聚合操作 在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多 ...

  7. limit mongodb 聚合_MongoDB 聚合操作(转)

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  8. Python中的Numpy(3.聚合操作)

    1.ndarray的常用的聚合操作 # 1.最大值/最小值 :np.max / np.min n1 = np.random.randint(0,100,20) print(n1) # 打印出n1中的最 ...

  9. Map端的聚合操作Combiner

    需求 词频统计,假设有一个文件,统计这个文件词频 常见的解决办法 例如原始文本是: 交给两个Map去处理,map1处理hello is hello is,map2处理hadoop is hadoop ...

最新文章

  1. 汇编指令处理的数据长度
  2. React开发(148):componentWillReceiveProps
  3. gsoap的几个常用设置选项
  4. linux主备网卡切换脚本,Keepalived主备切换时执行脚本
  5. Zookeeper基础笔记
  6. 第八篇: UpdateProgress 控件--显示正在处理中的信息
  7. 尽点力,虽然也不一定有用
  8. javascript原型继承圣杯模式
  9. php中常见的错误类型有,php中的错误类型有哪些
  10. 中国手机市场调查报告
  11. 解决关闭xftp,总是跳出无法访问网络位置,请输入xftp 6.msi
  12. shadow密码字段为!!_您的密码可能不如您想像的安全!
  13. 使用Travis CI实现C++ CMake工程多平台编译
  14. geforce experience出现错误尝试重启PC
  15. 时间序列预测方法最全总结!
  16. 攻略 | 一文教你学会使用GitHub!(附视频)
  17. 使用AndroidViewModel初始化报错
  18. android bp文件_理解Android.bp
  19. JSP_EL_JTEL
  20. Flutter高仿微信-表结构

热门文章

  1. linux打印显示etc中的文件,Linux命令之文件内容查看(cat、tac、nl、more、less、head、tail)...
  2. 计算机维修工具和仪器,浮球液位计介绍微型计算机常用维修工具和仪器
  3. 27留数及其应用(三)
  4. 【java】随机数的阶乘
  5. C语言单链表的应用,单链表应用
  6. 文档智能理解:通用文档预训练模型与数据集
  7. 情感极性分析:基于情感词典、k-NN、Bayes、最大熵、SVM的情感极性分析
  8. 机器学习入门系列:关于机器学习算法你需要了解的东西、如何开发机器学习模型?...
  9. c语言标准库assert,C 标准库 - assert.h
  10. pytorch中mask操作之torch.masked_select