Java8如何进行stream,reduce,collection操作
在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果。这些聚合操作被称为聚合操作。JDK除返回单个值的聚合操作外,还有很多聚合操作返回一个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修改现存的值,而不是每处理一个元素,创建一个新值
二、源代码
- 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);
- }
- }
相关推荐
主要介绍了JAVA8 stream中三个参数的reduce方法对List进行分组统计操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Java 8系列之Stream中万能的reduce用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
java8中通过stream流对List类型进行一些操作的测试Demo类
java8-Stream API终端操作.pdf
Java8 Stream教程,简单易懂
java 8 中Stream使用方式案例
java stream doc.
java8-Stream的状态与并行操作.pdf
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以...
主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下
主要是介绍在 JDK8中使用 stream 流的 groupingBy 方法源进行最大值分组、最小值分组、平均值分组、统计分组
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda,给我们操作集合(Collection)提供了极大的便利。 Stream将要处理的元素集合看作一种流,在流的过程中,借助`Stream API`对流中的...
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。 Stream API 借助于同样新...
Java8- Stream API的用法.pdf
Java8-Stream 文章目录Java8-Stream1. Stream1.1 Stream介绍1.1.1 介绍1.1.2 Stream特点1.1.3 直接对集合遍历操作与使用Stream操作集合的对比1.2 Stream使用1.2.1 使用流程1.2.2 获取Stream接口对象1.2.3 延迟方法...
Stream是数据渠道,用于操作集合、数组等生成的元素序列。 Stream操作的三个步骤: 创建Stream 中间操作 终止操作
java8新特性(Stream,lambda等)java8新特性(Stream,lambda等)java8新特性(Stream,lambda等)java8新特性(Stream,lambda等)
Stream是 Java 8新增加的类,用来补充集合类。 Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的。 Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理...
java8-Stream性能差?不要人云亦云.pdf
Java Stream是Java 8中引入的一个功能强大的API,用于处理集合(Collection)数据。它提供了一种流式处理的方式,可以对集合进行各种操作,如过滤、映射、排序等。 使用Java Stream可以简化代码,提高开发效率。它的...