java steam collect_Java8 如何进行stream reduce,collection操作
在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;
importjava.util.stream.Collectors;
publicclassLambdaMapReduce {
privatestaticList 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();
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 list = users.parallelStream().filter(p -> p.age > 12)
.collect(Collectors.toList());
System.out.println(list);
//按性别统计用户数
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操作每处理一个元素总是创建一个新值,
// Stream.reduce适用于返回单个结果值的情况
//获取所有用户的平均年龄
privatestaticvoidreduceAvg() {
// mapToInt的pipeline后面可以是average,max,min,count,sum
doubleavg = users.parallelStream().mapToInt(User::getAge)
.average().getAsDouble();
System.out.println("reduceAvg User Age: "+ avg);
}
//获取所有用户的年龄总和
privatestaticvoidreduceSum() {
doublesum = users.parallelStream().mapToInt(User::getAge)
.reduce(0, (x, y) -> x + y);// 可以简写为.sum()
System.out.println("reduceSum User Age: "+ sum);
}
}
三、参考
本文链接:http://my.oschina.net/cloudcoder/blog/215169
【编辑推荐】
【责任编辑:chenqingxiang TEL:(010)68476606】
点赞 0
java steam collect_Java8 如何进行stream reduce,collection操作相关推荐
- java steam 去重_Java中对List去重 Stream去重的解决方法
问题 当下互联网技术成熟,越来越多的趋向去中心化.分布式.流计算,使得很多以前在数据库侧做的事情放到了Java端.今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?大家都一致认为用Ja ...
- java 8 stream reduce详解和误区
文章目录 简介 reduce详解 总结 java 8 stream reduce详解和误区 简介 Stream API提供了一些预定义的reduce操作,比如count(), max(), min() ...
- java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
- java8 stream reduce 方法用法 java stream reduce 方法使用方法
java8 stream reduce 方法用法 java stream reduce 方法使用方法 一.背景 在使用Stream的reduce方法时,发现该方法有 3个重载方法,分别是: 一个参数. ...
- Java 字符串拼接4种实现方法(for循环、stream().reduce()、Collectors.joining()、String.join())
1 for循环实现 List<String> list = new ArrayList<>(Arrays.asList("1", "2" ...
- Java Stream Reduce
1 背景 1.1 编程思想 Map Reduce是一种编程思想 ,MapReduce 模型将数据处理方式抽象为 map 和 reduce map 也叫映射,它表现的是数据的一对一映射,通常完成数据转换 ...
- 跟我学 Java 8 新特性之 Stream 流(六)收集
转载自 跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...
- 跟我学 Java 8 新特性之 Stream 流(四)并行流
转载自 跟我学 Java 8 新特性之 Stream 流(四)并行流 随着对流API认识的慢慢深入,本章我们要讨论的知识点是流API里面的并行流了. 在开始讨论并行流之前,我先引发一下大家的思考, ...
- 跟我学 Java 8 新特性之 Stream 流(五)映射
转载自 跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...
最新文章
- 洛谷 - 试炼场(全部题目备份)
- postman api
- 与张小龙同行:微信小程序开发
- python的scrapy爬虫模块间进行传参_Python | Scrapy 爬虫过程问题解决(持续更新...)...
- “CEPH浅析”系列之七——关于CEPH的若干想法
- 前端学习(2674):vue3修改
- Leetcode--461. 汉明距离
- C#获取本执行程序所在的当前路径
- 底部导航栏使用BottomNavigationBar
- 编程的心法与注意事项
- python爬虫实战——爬取猫眼电影TOP100并导入excel表
- otsu算法详细推导、实现及Multi Level OTSU算法实现
- go语言中遍历中文出现乱码
- 鸿蒙电脑系统连不上打印机,电脑与打印机脱机怎么连接
- 格雷斯音频大篷车无线音箱回顾
- 常见大学机房的计算机设备,长江大学公共机房管理办法
- 朴素贝叶斯——凉鞋问题
- 故障转移集群搭建高可用文件共享服务器
- 《仙剑奇侠传3》仙术合集
- 华纳云:MySQL数据丢失的原因是什么及怎么解决
热门文章
- 第一次出差:有点迷糊,出现了很多问题,在此做一下备忘录
- Win7安全模式卡在ClassPNP.sys位置解决办法之一
- 鄙视糯米团购网, 声讨糯米团
- html 页面地图不显示图片,嵌入谷歌地图不显示在HTML页面
- 蓝桥杯单片机模块代码(DS1302时钟芯片)(代码+注释)
- No qualifying bean of type ‘com.alibaba.dubbo.config.ApplicationConfig‘ available: expected at least
- Hadoop学习(16)-MapReduce的shuffle详解
- 《最详细的docker+php开发环境教程》(五) 搭建开发环境概要
- 爬虫入门教程 —— 1
- 龙族幻想微信一区哪个服务器人多,龙族幻想微信一区-命运之刃开服时间表_龙族幻想新区开服预告_第一手游网手游开服表...