Java 根据 Stream 分组聚合
在Java编程中,我们经常需要对数据进行分组和聚合操作。Java 8 引入了 Stream API,它提供了一种声明式的方式来处理集合数据。本文将介绍如何使用 Java Stream API 进行分组和聚合。
旅行图
首先,我们通过一个旅行图来展示数据分组和聚合的过程。
journey
title 数据分组聚合流程
section 定义数据源
step1: 定义数据源
section 使用 Stream API
step2: 使用 `Collectors.groupingBy` 进行分组
step3: 使用 `Collectors.summing` 进行聚合
section 得到结果
step4: 打印结果
定义数据源
我们首先定义一个包含多个用户的列表,每个用户有一个名字和年龄属性。
List<User> users = Arrays.asList(
new User("Alice", 25),
new User("Bob", 30),
new User("Charlie", 35),
new User("David", 25),
new User("Eve", 30)
);
这里,User
类定义如下:
class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters
}
使用 Stream API 进行分组和聚合
接下来,我们使用 Stream API 对用户列表进行分组和聚合。我们的目标是按年龄分组,并计算每个年龄组的总年龄。
Map<Integer, Integer> ageGroupTotal = users.stream()
.collect(Collectors.groupingBy(
User::getAge,
Collectors.summingInt(User::getAge)
));
这里,我们使用了 Collectors.groupingBy
方法进行分组,它的第二个参数是另一个收集器,用于对分组后的数据进行聚合。在这个例子中,我们使用了 Collectors.summingInt
来计算每个年龄组的总年龄。
得到结果
最后,我们打印出分组聚合的结果。
ageGroupTotal.forEach((age, total) -> System.out.println("Age group " + age + " has a total age of " + total));
这将输出:
Age group 25 has a total age of 50
Age group 30 has a total age of 60
Age group 35 has a total age of 35
总结
通过使用 Java Stream API,我们可以方便地对数据进行分组和聚合操作。Collectors.groupingBy
方法结合其他收集器,如 Collectors.summingInt
,可以轻松实现这一功能。这不仅提高了代码的可读性,还使得数据处理更加灵活和强大。
希望本文能帮助你更好地理解和使用 Java Stream API 进行分组和聚合。如果你有任何问题或建议,请随时留言讨论。