groupingBy
时间: 2023-07-05 11:08:20 浏览: 137
`groupingBy` 是 Java 8 中的一个 stream 操作,它可以将 stream 中的元素按照指定的规则进行分组,并将分组后的结果返回一个 Map 对象。例如,我们可以对一个字符串列表按照字符串的长度进行分组:
```java
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
Map<Integer, List<String>> result = list.stream().collect(Collectors.groupingBy(String::length));
System.out.println(result);
```
输出结果为:
```
{5=[apple], 6=[banana, orange], 4=[pear]}
```
其中,`groupingBy` 的第一个参数是一个 Function 对象,表示分组的规则,这里使用了方法引用 `String::length` 表示按照字符串的长度进行分组;第二个参数是一个 Collector 对象,表示对每个分组后的元素进行的操作,这里使用了默认的操作,即将分组后的元素放入一个 List 对象中。
除了默认的操作外,`groupingBy` 还支持自定义操作,例如将分组后的元素求和:
```java
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
Map<Boolean, Integer> result = nums.stream().collect(Collectors.groupingBy(n -> n % 2 == 0, Collectors.summingInt(Integer::intValue)));
System.out.println(result);
```
输出结果为:
```
{false=25, true=20}
```
其中,第二个参数使用了 `Collectors.summingInt` 操作,表示对分组后的元素进行求和操作。
阅读全文