list的stream流分组,每个分组之间按照某一字段排序
时间: 2023-07-08 13:37:50 浏览: 126
可以使用Java 8的Stream API中的groupingBy和sorted方法来实现这个需求。假设我们有一个List<Student>,其中每个Student对象都包含name、age和score三个字段,现在要按照age字段进行分组,每个分组内按照score字段进行降序排序,代码如下:
```
List<Student> students = ... // 初始化List<Student>
Map<Integer, List<Student>> grouped = students.stream()
.sorted(Comparator.comparingInt(Student::getScore).reversed()) // 先按照score字段降序排序
.collect(Collectors.groupingBy(Student::getAge)); // 再按照age字段进行分组
// 输出每个分组内的学生信息
grouped.forEach((age, group) -> {
System.out.println("Age group: " + age);
group.forEach(student -> System.out.println(" " + student.getName() + " " + student.getAge() + " " + student.getScore()));
});
```
这段代码首先将List<Student>转换为Stream<Student>,然后使用sorted方法对所有学生按照score字段进行降序排序,最后使用groupingBy方法对所有学生按照age字段进行分组。注意,groupingBy方法的返回值是一个Map<Integer, List<Student>>,其中Integer表示分组的键值,List<Student>表示分组内的所有学生。最后,我们可以使用forEach方法遍历每个分组,并输出每个学生的信息。
阅读全文