reduce在list<map> 的stream中如何使用
时间: 2023-09-28 07:13:10 浏览: 167
在 `List<Map<String, Object>>` 的 Stream 中使用 reduce 可以实现对列表中所有 map 的某一个字段进行累加。具体实现方法有两种:
1. 使用 `reduce` 方法
```java
List<Map<String, Object>> list = ... // 列表数据
int sum = list.stream()
.map(map -> (int) map.get("score"))
.reduce(0, Integer::sum);
return sum;
```
上述代码中,首先使用 `map` 方法将每一个 map 转换为积分字段的值,然后使用 `reduce` 方法对所有积分字段的值进行累加求和。
2. 使用 `collect` 方法
```java
List<Map<String, Object>> list = ... // 列表数据
int sum = list.stream()
.collect(Collectors.summingInt(map -> (int) map.get("score")));
return sum;
```
上述代码中,使用 `collect` 方法将所有积分字段的值进行累加求和。其中,`Collectors.summingInt` 方法将一个包含整数的流转换为一个求和结果的收集器。
需要注意的是,以上两种方法都要求列表中的每一个 map 都包含积分字段,否则会抛出 `NullPointerException` 异常。如果需要处理积分字段为空的情况,可以使用 `Optional` 类型进行处理。
阅读全文