欢迎访问宙启技术站
智能推送

Java中使用Stream函数处理数据的示例

发布时间:2023-06-17 09:41:03

Stream是一个Java 8提供的函数式编程API。它提供了一个新的抽象层,为Java程序员提供了一种更加优雅的方式来处理数据集合,包括列表(List)、数组(Array)、集合(Collection)等。

在使用Stream函数的过程中,可以使用Lambda表达式来描述对数据的处理过程,这样可以让代码更加简洁、易于读懂、易于维护。本文将以一个简单的示例来介绍如何使用Stream函数来处理一个数据集合。

示例场景

假设有一个学生成绩数据集合,包含每个学生的名字、年龄和考试成绩。现在需要:

1.统计每个年龄段的学生数量和平均分数。

2.找出考试成绩不及格(低于60分)的学生名字。

示例数据如下:

List<Student> students = new ArrayList<>();
students.add(new Student("张三", 18, 90));
students.add(new Student("李四", 17, 80));
students.add(new Student("王五", 18, 75));
students.add(new Student("赵六", 17, 55));
students.add(new Student("钱七", 19, 85));
students.add(new Student("孙八", 18, 70));
students.add(new Student("周九", 17, 65));
students.add(new Student("吴十", 19, 95));

示例代码

1.统计每个年龄段的学生数量和平均分数。

首先,我们需要将学生按照年龄分组,并计算每组的学生数量和平均分数。

Map<Integer, IntSummaryStatistics> result = students.stream()
                       .collect(Collectors.groupingBy(Student::getAge, Collectors.summarizingInt(Student::getScore)));

说明:

- Collectors.groupingBy方法按照指定的属性对学生进行分组。

- Collectors.summarizingInt方法对每个分组的学生进行汇总,包括count(数量)、sum(分数总和)、average(平均分数)等三个属性。

- Map<Integer, IntSummaryStatistics>是一个键值对集合,其中键是年龄,值是每个分组的汇总统计数据。

接下来,我们可以将结果输出到控制台:

result.forEach((age, stats) -> {
    System.out.println("Age:" + age + " Count:" + stats.getCount() + " Average:" + stats.getAverage());
});

输出结果如下:

Age:17 Count:3 Average:66.66666666666667
Age:18 Count:3 Average:78.33333333333333
Age:19 Count:2 Average:90.0

2.找出考试成绩不及格(低于60分)的学生名字。

我们可以使用filter方法过滤出考试成绩低于60分的学生,然后使用map方法将学生对象转换为学生名字。最后,使用collect方法将学生名字以列表形式输出。

List<String> names = students.stream()
                        .filter(student -> student.getScore() < 60)
                        .map(Student::getName)
                        .collect(Collectors.toList());

说明:

- Stream.filter方法用于过滤数据,保留满足条件的元素。

- Stream.map方法用于对数据进行转换。

- Collectors.toList方法用于将数据转换为列表形式。

最后,输出考试成绩低于60分的学生名字:

System.out.println("不及格的学生名字:" + names);

输出结果如下:

不及格的学生名字:[赵六]

总结

通过这个示例,我们学习了如何使用Stream函数来处理数据集合。Stream函数提供了一种更加优雅、简洁、易于读懂的方式来处理数据,可以大大提高Java程序员的工作效率。因此,如果你还没有掌握Stream函数,请尽快学习,它一定会让你的开发工作更加轻松!