两个List<Map<String,Intenger>>集合怎么合并?
时间: 2023-10-14 17:14:31 浏览: 34
可以使用Java 8的Stream API来合并两个List<Map<String, Integer>>集合。
假设有以下两个List<Map<String, Integer>>集合:
```java
List<Map<String, Integer>> list1 = new ArrayList<>();
Map<String, Integer> map1 = new HashMap<>();
map1.put("a", 1);
map1.put("b", 2);
list1.add(map1);
List<Map<String, Integer>> list2 = new ArrayList<>();
Map<String, Integer> map2 = new HashMap<>();
map2.put("b", 3);
map2.put("c", 4);
list2.add(map2);
```
可以使用以下代码将这两个集合合并:
```java
List<Map<String, Integer>> mergedList = Stream.concat(list1.stream(), list2.stream())
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.summingInt(Map.Entry::getValue)))
.entrySet().stream()
.map(entry -> {
Map<String, Integer> map = new HashMap<>();
map.put(entry.getKey(), entry.getValue());
return map;
})
.collect(Collectors.toList());
```
这段代码的流程如下:
- 使用Stream.concat()方法将两个集合合并为一个Stream对象。
- 使用flatMap()方法将每个Map对象的entry集合转换为一个新的Stream对象。
- 使用Collectors.groupingBy()方法将entry集合按照key分组,并将value求和。
- 使用entrySet()方法将Map对象转换为一个entry集合。
- 使用map()方法将每个entry转换为一个新的Map对象。
- 使用Collectors.toList()方法将所有的Map对象收集到一个List集合中。
最终的mergedList集合中的元素为:
```java
[{a=1}, {b=5}, {c=4}]
```
其中,{a=1}表示key为"a",value为1;{b=5}表示key为"b",value为5;{c=4}表示key为"c",value为4。