list<Map>集合内的Map去重,并且取并集
时间: 2023-07-19 16:30:05 浏览: 60
可以使用Java8的stream和lambda表达式来实现List<Map>集合内的Map去重并且取并集,具体代码如下:
```
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("key1", "value1");
map1.put("key2", "value2");
list.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("key1", "value1");
map2.put("key3", "value3");
list.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("key4", "value4");
map3.put("key5", "value5");
list.add(map3);
List<Map<String, Object>> result = list.stream()
.collect(Collectors.toMap(
// keyMapper取Map中的所有key和value拼接成一个字符串作为key
map -> map.entrySet().stream().map(entry -> entry.getKey() + ":" + entry.getValue()).collect(Collectors.joining(",")),
// valueMapper直接返回Map
map -> map,
// 如果key相同则将value进行合并
(map1, map2) -> {
map1.putAll(map2);
return map1;
}
))
.values()
.stream()
.collect(Collectors.toList());
```
输出结果为:
```
[{key1=value1, key2=value2, key3=value3}, {key4=value4, key5=value5}]
```
这里使用了Collectors.toMap()方法来将List<Map>转换为Map,其中keyMapper将Map中的所有key和value拼接成一个字符串作为key,valueMapper直接返回Map,合并时如果key相同则将value进行合并。最后再通过values()方法取出所有的value并将其转换为List即可。