Java Lambda 分组聚合
Java 8 引入了 Lambda 表达式,为开发者提供了一种简洁、灵活的编程方式。在 Java Lambda 中,分组聚合是一种常见的操作,它能够将数据按照某个属性进行分组,然后对每个组进行聚合操作。这篇文章将介绍 Java Lambda 分组聚合的概念,并给出一些代码示例。
什么是分组聚合
分组聚合是一种将数据按照某个属性进行分组,并对每个组进行聚合操作的技术。在实际开发中,我们经常需要对数据进行分类统计、求和、取最大值等操作。使用分组聚合可以大大简化这些操作的代码实现。
分组聚合的代码示例
假设我们有一个学生类 Student,该类有两个属性:姓名(name)和年级(grade)。现在我们需要统计每个年级的学生人数。下面是一个使用 Java Lambda 进行分组聚合的示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
class Student {
private String name;
private int grade;
public Student(String name, int grade) {
this.name = name;
this.grade = grade;
}
public String getName() {
return name;
}
public int getGrade() {
return grade;
}
}
public class GroupingAndAggregationExample {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student("Tom", 1),
new Student("Jerry", 1),
new Student("Alice", 2),
new Student("Bob", 2),
new Student("Eva", 3)
);
Map<Integer, Long> studentCountByGrade = students.stream()
.collect(Collectors.groupingBy(Student::getGrade, Collectors.counting()));
System.out.println(studentCountByGrade);
}
}
在上面的代码中,我们首先定义了一个 Student 类,然后创建了一个包含不同年级学生的列表。接着,我们使用 Java Lambda 的 stream() 方法将列表转换为一个流,然后使用 Collectors.groupingBy() 方法对学生按照年级进行分组,再使用 Collectors.counting() 方法统计每个组的人数。最后,我们打印出了每个年级的学生人数。
上述代码的输出结果为:{1=2, 2=2, 3=1},表示一年级有 2 名学生,二年级有 2 名学生,三年级有 1 名学生。
类图
下面是 Student 类的类图表示:
classDiagram
class Student {
- String name
- int grade
+ Student(String name, int grade)
+ String getName()
+ int getGrade()
}
总结
Java Lambda 分组聚合提供了一种简洁、灵活的方式来对数据进行分类统计、求和、取最大值等操作。通过使用 Collectors.groupingBy() 方法和 Collectors.counting() 方法,我们可以轻松地对数据进行分组聚合。希望本文对你理解 Java Lambda 分组聚合有所帮助!
参考链接
- [Java 8 中的 Stream API](
















