java8 groupingBy
时间: 2023-09-25 08:14:53 浏览: 98
Java 8的groupingBy是一个用于对集合进行分组的方法。它是Stream API中的一个终端操作,可以基于给定的分类函数将元素分组成一个Map。
下面是groupingBy方法的基本语法:
```
public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier)
```
其中,T表示集合中的元素的类型,K表示分组的键的类型。classifier是一个函数,用于根据元素生成分组的键。
下面是一个示例,演示如何使用groupingBy对一个字符串集合进行分组,按照字符串的长度进行分组:
```java
List<String> strings = Arrays.asList("apple", "banana", "cat", "dog", "elephant", "fish");
Map<Integer, List<String>> result = strings.stream()
.collect(Collectors.groupingBy(String::length));
System.out.println(result);
```
运行结果为:
```
{3=[cat, dog], 4=[fish], 5=[apple], 6=[banana], 8=[elephant]}
```
在这个例子中,我们使用String::length作为分类函数,将字符串按照长度分组成一个Map,其中键是字符串的长度,值是具有相同长度的字符串列表。
除了上述示例,groupingBy还可以与其他收集器一起使用,实现更复杂的分组操作。例如,我们可以使用groupingBy结合counting收集器来统计每个分组中元素的数量:
```java
Map<Integer, Long> result = strings.stream()
.collect(Collectors.groupingBy(String::length, Collectors.counting()));
System.out.println(result);
```
运行结果为:
```
{3=2, 4=1, 5=1, 6=1, 8=1}
```
这个例子中,我们使用groupingBy和counting收集器结合,统计每个分组中元素的数量。
总结:Java 8的groupingBy方法是一个强大的工具,可以帮助我们对集合进行灵活的分组操作。它通过分类函数将元素分组成一个Map,可以与其他收集器一起使用,实现更复杂的分组统计等操作。
阅读全文