java对List<Map<String,Object>>这个分组求和
时间: 2023-10-14 19:46:39 浏览: 136
您可以使用Java 8的流(Stream)和Lambda表达式来对`List<Map<String, Object>>`进行分组求和操作。以下是一个示例代码:
```java
import java.util.*;
import java.util.stream.Collectors;
public class GroupingSum {
public static void main(String[] args) {
List<Map<String, Object>> dataList = new ArrayList<>();
Map<String, Object> data1 = new HashMap<>();
data1.put("category", "A");
data1.put("value", 10);
dataList.add(data1);
Map<String, Object> data2 = new HashMap<>();
data2.put("category", "B");
data2.put("value", 20);
dataList.add(data2);
Map<String, Object> data3 = new HashMap<>();
data3.put("category", "A");
data3.put("value", 30);
dataList.add(data3);
Map<String, Object> data4 = new HashMap<>();
data4.put("category", "B");
data4.put("value", 40);
dataList.add(data4);
// 分组求和
Map<String, Integer> sumByCategory = dataList.stream()
.collect(Collectors.groupingBy(
e -> (String) e.get("category"),
Collectors.summingInt(e -> (Integer) e.get("value"))
));
// 输出结果
for (Map.Entry<String, Integer> entry : sumByCategory.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
```
上述代码定义了一个`dataList`,其中包含多个`Map`对象,每个`Map`对象都有两个键值对,分别是"category"和"value"。使用`Collectors.groupingBy`方法对"category"进行分组,然后使用`Collectors.summingInt`方法对"value"进行求和。最后将结果打印出来。
运行上述代码,输出结果如下:
```
A: 40
B: 60
```
这表示"category"为"A"的"value"之和为40,"category"为"B"的"value"之和为60。
阅读全文