Collectors.groupingBy方法空指针异常
时间: 2024-08-23 20:00:37 浏览: 68
深入探索Java 8的`Collectors.groupingBy()`:分组的艺术
`Collectors.groupingBy()` 是 Java 8 中 Stream API 提供的一个收集器,用于将元素按照某个键值进行分组并存储在一个映射(Map)中。如果你遇到 `NullPointerException`,通常是因为在调用这个方法时遇到了以下情况:
1. **流(Stream)为空**:如果初始的集合或数组是空的,那么在 `collect(groupingBy(keyFunction))` 调用后不会有任何元素,这时 `.groupingBy()` 方法的结果将会是一个空的 Map,所以处理空 Map 时需要检查。
```java
List<String> list = Collections.emptyList();
Map<String, List<String>> grouped = list.stream()
.collect(Collectors.groupingBy(String::length));
```
这里,如果 `list` 空,`grouped` 将是空的,访问它时可能会抛出 `NullPointerException`。
2. **键函数 (keyFunction) 返回 `null`**:当你传递给 `groupingBy()` 的 `keyFunction` 函数返回值为 `null` 时,也会导致异常,因为 Map 需要非空的键值对。
```java
Map<String, String> map = list.stream()
.collect(Collectors.groupingBy(s -> s == null ? "" : s)); // 如果有 "null" 类型的元素,这就会引发 NPE
```
为了避免这种异常,你应该添加适当的条件判断或者使用 `Objects.requireNonNull()` 或者 `Optional` 来处理可能出现 `null` 的结果。
阅读全文