stream 分组后再排序写法
时间: 2023-07-31 22:04:05 浏览: 68
可以使用 Java 8 中的 Stream API 来实现分组后再排序,具体写法如下:
假设我们有一个 List<Student>,每个学生有姓名和分数两个属性,现在要按照分数分组后再按照姓名排序,可以使用以下代码:
```
Map<Integer, List<Student>> map = students.stream()
.collect(Collectors.groupingBy(Student::getScore)); // 先按照分数分组
map.values().forEach(list -> {
list.sort(Comparator.comparing(Student::getName)); // 对每个分组内的学生按照姓名排序
});
```
以上代码首先使用 `Collectors.groupingBy` 方法按照学生的分数进行分组,得到一个以分数为 key,以学生列表为 value 的 Map。
然后使用 `forEach` 方法遍历每个分组内的学生列表,对每个列表使用 `sort` 方法按照学生姓名进行排序,这里使用了 `Comparator.comparing` 方法来生成一个以学生姓名为比较器的 Comparator。
最终得到的 map 就是按照分数分组后再按照姓名排序的结果。
相关问题
stream 分组后再根据key值排序写法
可以使用 Java 8 中的 Stream API 来实现分组后再根据 key 值排序。具体写法如下:
假设我们有一个 List<Student>,每个学生有姓名和分数两个属性,现在要按照分数分组后再按照分数从小到大排序,可以使用以下代码:
```
Map<Integer, List<Student>> map = students.stream()
.collect(Collectors.groupingBy(Student::getScore)); // 先按照分数分组
Map<Integer, List<Student>> sortedMap = new TreeMap<>(map); // 使用 TreeMap 对 map 进行排序
```
以上代码首先使用 `Collectors.groupingBy` 方法按照学生的分数进行分组,得到一个以分数为 key,以学生列表为 value 的 Map。
然后使用 `TreeMap` 对 map 进行排序,由于 TreeMap 是有序的,所以会按照 key 的自然顺序(即分数从小到大)进行排序。
最终得到的 sortedMap 就是按照分数分组后再按照分数从小到大排序的结果。
使用stream分组求和再排序
可以回答这个问题。使用stream分组求和再排序,可以通过Java 8中的Stream API实现。首先,使用groupingBy方法将数据按照指定的属性分组,然后使用summingInt方法对每个分组内的数据进行求和,最后使用sorted方法对结果进行排序。具体实现可以参考以下代码:
```
List<Data> dataList = ...; // 数据列表
Map<String, Integer> result = dataList.stream()
.collect(Collectors.groupingBy(Data::getGroup, Collectors.summingInt(Data::getValue)))
.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (v1, v2) -> v1, LinkedHashMap::new));
```
其中,Data是数据类,包含group和value两个属性。上述代码将数据按照group分组,对每个分组内的value进行求和,最后按照求和结果进行排序,并将结果保存在一个LinkedHashMap中。