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](