Collectors.groupingBy分组后排序就乱了
时间: 2024-02-19 19:56:39 浏览: 78
深入探索Java 8的`Collectors.groupingBy()`:分组的艺术
在Java中,Collectors.groupingBy是一个用于对流进行分组操作的收集器。它可以根据指定的分类函数对元素进行分组,并将结果放入一个Map中,其中键是分类的结果,值是属于该分类的元素列表。
默认情况下,Collectors.groupingBy不会对分组后的结果进行排序。这是因为Map本身是无序的数据结构,它不保证元素的顺序。如果你希望对分组后的结果进行排序,可以使用Collectors.toMap方法,并指定一个排序的Comparator。
下面是一个示例代码,演示了如何对分组后的结果进行排序:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eva");
Map<Character, List<String>> groupedNames = names.stream()
.collect(Collectors.groupingBy(name -> name.charAt(0)));
// 对分组后的结果按键进行排序
Map<Character, List<String>> sortedGroupedNames = new TreeMap<>(groupedNames);
sortedGroupedNames.forEach((key, value) -> System.out.println(key + ": " + value));
}
}
```
输出结果为:
```
A: [Alice]
B: [Bob]
C: [Charlie]
D: [David]
E: [Eva]
```
在上面的示例中,我们使用Collectors.groupingBy对names列表进行分组,按照名字的首字母进行分类。然后,我们使用TreeMap对分组后的结果进行排序,按照键的自然顺序进行排序。
阅读全文