Collectors.groupingBy 分组
时间: 2023-08-01 20:13:53 浏览: 285
Collectors.groupingBy 是 Java 8 中的一个收集器(Collector),它用于将流中的元素按照指定的分类函数进行分组。它的使用方式如下:
```java
Map<K, List<T>> result = stream.collect(Collectors.groupingBy(classifier));
```
其中,`stream` 是一个流,`classifier` 是一个分类函数,它将流中的元素映射为一个分类的键(K)。`Collectors.groupingBy` 方法会根据分类函数对流中的元素进行分组,并将结果存储在一个 `Map` 对象中,其中键(K)是分类的结果,值是属于该分类的元素列表(List<T>)。
除了基本的分组功能,`Collectors.groupingBy` 还提供了其他一些重载方法,可以进行多级分组、指定结果容器类型等操作。例如,可以使用 `Collectors.groupingBy(classifier, downstream)` 方法指定一个下游收集器,对每个分组进行进一步的操作。
这是一个简单的示例,演示了如何使用 `Collectors.groupingBy` 进行分组操作:
```java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
Map<Integer, List<String>> result = names.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(result);
```
输出结果为:
```
{3=[Bob, Eve], 5=[Alice], 7=[Charlie], 5=[David]}
```
在这个例子中,我们根据字符串的长度将元素进行了分组,得到了一个以字符串长度为键,以属于该长度的字符串列表为值的 `Map` 对象。
阅读全文