stream流先分组后排序
时间: 2024-03-19 11:37:34 浏览: 107
stream流是Java 8引入的一个功能强大的API,它提供了一种函数式编程的方式来处理集合数据。在stream流中,可以使用多个操作来对数据进行处理,其中包括分组和排序。
首先,我们需要将数据进行分组。在stream流中,可以使用`Collectors.groupingBy`方法来实现分组操作。该方法接受一个分类函数作为参数,将数据按照分类函数的结果进行分组。例如,假设我们有一个包含学生信息的列表,我们可以按照学生的年级进行分组:
```java
List<Student> students = ...; // 学生信息列表
Map<String, List<Student>> groupedStudents = students.stream()
.collect(Collectors.groupingBy(Student::getGrade));
```
上述代码中,`Student::getGrade`是一个分类函数,它返回学生的年级。`groupingBy`方法将学生按照年级进行分组,并返回一个`Map`对象,其中键是年级,值是对应年级的学生列表。
接下来,我们可以对每个分组进行排序。在stream流中,可以使用`sorted`方法来对数据进行排序。例如,我们可以对每个年级的学生按照姓名进行排序:
```java
groupedStudents.forEach((grade, students) -> {
List<Student> sortedStudents = students.stream()
.sorted(Comparator.comparing(Student::getName))
.collect(Collectors.toList());
groupedStudents.put(grade, sortedStudents);
});
```
上述代码中,我们使用`sorted`方法对每个年级的学生列表进行排序,排序的依据是学生的姓名。然后,我们使用`collect`方法将排序后的学生列表收集到一个新的列表中,并将其放回原来的`Map`对象中。
最后,我们可以通过遍历分组后的数据来查看结果:
```java
groupedStudents.forEach((grade, students) -> {
System.out.println("Grade: " + grade);
students.forEach(student -> System.out.println(student.getName()));
});
```
上述代码中,我们遍历每个年级的学生列表,并打印学生的姓名。
阅读全文