List<Map>里面把两条相同id和name的数据的number相加合并为一条数据
时间: 2024-11-22 14:36:05 浏览: 5
判断List和Map是否相等并合并List中相同的Map
5星 · 资源好评率100%
在Java中,如果你有一个`List<Map<String, Object>>`,并且你想合并具有相同ID和名称的项,同时将对应的`number`字段相加,可以使用`Stream` API 和 `Collectors.groupingBy` 来实现。假设`Map`的结构如下:
```java
Map<String, Map<String, Number>> data = // 这是一个包含ID、名称和数字的List转换得到的
[
{"id": "1", "name": "A", "number": 5},
{"id": "1", "name": "A", "number": 7},
{"id": "2", "name": "B", "number": 3}
];
```
你可以这样做:
```java
import java.util.*;
import java.util.stream.*;
Map<String, Map<String, Long>> combinedData = data.stream()
.collect(Collectors.groupingBy(
entry -> new AbstractMap.SimpleEntry<>(entry.get("id"), entry.get("name")),
Collectors.reducing(new HashMap<>(), Map.Entry::put, (map1, map2) -> {
if (!map1.containsKey("number")) {
map1.put("number", map2.get("number"));
} else {
map1.merge("number", map2.get("number"), Long::sum);
}
return map1;
})
));
```
这会返回一个新的`Map`,其中每个键关联着一个`Map`,`key`是ID和名称的组合,`value`是`number`的累计总和。
阅读全文