List<byte[]>.stream().mapToInt(data ->data.length).sum()报空指针
时间: 2025-03-14 22:05:07 浏览: 32
`List<byte[]>.stream().mapToInt(data -> data.length).sum()` 报空指针异常的原因可能是 `List` 中存在值为 `null` 的元素。当流操作遇到这个 `null` 元素并尝试访问其长度 (`data.length`) 时,就会抛出 `NullPointerException`。
### 解决方案
为了避免这种情况发生,可以在调用 `.mapToInt(data -> data.length)` 前过滤掉所有的 `null` 元素:
```java
int sum = list.stream()
.filter(Objects::nonNull) // 过滤掉 null 元素
.mapToInt(data -> data.length)
.sum();
```
这样可以确保只有非空的 `byte[]` 数组参与后续的操作。
---
### 空指针原因分析
1. **列表本身为空**:如果 `List<byte[]>` 本身就是 `null`,那么直接调用 `.stream()` 就会报空指针异常。需要先检查列表是否为 `null`。
```java
if (list != null) {
int sum = list.stream()
.filter(Objects::nonNull)
.mapToInt(data -> data.length)
.sum();
}
```
2. **列表中有部分元素为 null**:即使列表不是 `null`,但如果其中某些元素是 `null`,仍然会在对它们调用 `.length` 属性时导致空指针异常。因此需要用 `.filter(Objects::nonNull)` 来排除这些潜在问题。
---
阅读全文
相关推荐












