List<Map<String, Object>> mapList怎么用流groupby
时间: 2023-07-09 18:04:35 浏览: 99
java8中stream特性对比实现SQL语句等价功能的用法的部分示例
假设我们有一个 `List<Map<String, Object>>` 类型的变量 `dataList`,其中每个 Map 表示一个数据行,包含了多个字段。我们想要对这些数据按照某个字段进行分组,并计算每组的数量和总和。可以使用 Java 8 中的流和 `Collectors.groupingBy` 方法来实现。
具体的代码如下:
```java
// 按照字段 "groupField" 进行分组,并计算每组的数量和 "sumField" 字段的总和
Map<Object, Map<String, Object>> groupResult = dataList.stream()
.collect(Collectors.groupingBy(
map -> map.get("groupField"),
Collectors.collectingAndThen(
Collectors.toList(),
list -> {
int count = list.size();
double sum = list.stream().mapToDouble(map -> (double) map.get("sumField")).sum();
Map<String, Object> result = new HashMap<>();
result.put("count", count);
result.put("sum", sum);
return result;
}
)
));
```
上述代码中,`groupingBy` 方法的第一个参数传入一个函数,用来指定按照哪个字段进行分组,它返回的值就是分组的依据。第二个参数传入一个收集器,用来收集每个组内的元素,并对它们进行计算。在本例中,我们使用 `Collectors.collectingAndThen` 方法来指定一个中间收集器,它首先将同一组的元素收集到一个列表中,然后对这个列表进行计算,计算出数量和总和,最后将结果封装到一个 `Map` 中返回。整个流式处理的结果是一个 `Map<Object, Map<String, Object>>` 类型的变量 `groupResult`,其中第一层的键是分组的值,第二层的键是 "count" 和 "sum",分别对应数量和总和。
阅读全文