java怎么快速将两个map中key值相同的类型为list的value进行合并
时间: 2024-05-03 13:22:35 浏览: 238
可以使用Java8中的Stream API和Map的merge()方法来实现。具体步骤如下:
1. 将两个Map转换为Stream对象。
2. 使用flatMap()方法将每个Map的entrySet转换为一个Stream对象。
3. 使用filter()方法过滤出key值相同的entry。
4. 使用Map的merge()方法合并value值。
代码示例:
```java
Map<String, List<String>> map1 = new HashMap<>();
map1.put("key1", Arrays.asList("value1", "value2"));
map1.put("key2", Arrays.asList("value3", "value4"));
Map<String, List<String>> map2 = new HashMap<>();
map2.put("key1", Arrays.asList("value5", "value6"));
map2.put("key3", Arrays.asList("value7", "value8"));
// 使用Stream和Map的merge()方法合并两个Map
Map<String, List<String>> result = Stream.concat(map1.entrySet().stream(), map2.entrySet().stream())
.filter(entry -> map1.containsKey(entry.getKey()) && map2.containsKey(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(list1, list2) -> {
List<String> result1 = new ArrayList<>(list1);
result1.addAll(list2);
return result1;
}));
System.out.println(result);
// 输出:{key1=[value1, value2, value5, value6]}
```
以上代码将两个Map中key值相同的类型为List的value进行了合并,最终得到一个新的Map。在合并过程中,如果有相同的key,则将对应的value合并为一个List。
阅读全文