java合并map同时对value去重
时间: 2024-10-10 15:12:55 浏览: 35
在Java中,如果你想要合并两个Map并去除值的重复,你可以使用`TreeMap`或者自定义一个集合类配合`putIfAbsent`方法。以下是两种方法:
**方法一:使用TreeMap**
`TreeMap`的自然排序特性可以帮助你在添加元素时自动去重。假设你要合并的Map里元素的键不是唯一的,那么值会按照插入顺序保留一次。
```java
Map<String, String> map1 = new HashMap<>();
// ...填充map1...
Map<String, String> map2 = new HashMap<>();
// ...填充map2...
Map<String, String> mergedMap = new TreeMap<>(map1);
mergedMap.putAll(map2);
```
**方法二:自定义HashSet辅助去重**
如果需要保持原始Map的键值对结构,可以创建一个`LinkedHashMap`(保持插入顺序),然后使用一个`HashSet`来存储已经遇到过的值。
```java
Map<String, Set<String>> mergedMap = new LinkedHashMap<>();
for (Map.Entry<String, String> entry : map1.entrySet()) {
if (!mergedMap.containsKey(entry.getKey())) {
mergedMap.put(entry.getKey(), new HashSet<>());
}
mergedMap.get(entry.getKey()).add(entry.getValue());
}
for (Map.Entry<String, Set<String>> entry : map2.entrySet()) {
if (!mergedMap.containsKey(entry.getKey())) {
mergedMap.put(entry.getKey(), new HashSet<>());
}
mergedMap.get(entry.getKey()).addAll(entry.getValue());
}
```
现在,`mergedMap`里的每个键对应的值都是唯一且按添加顺序排列的。
阅读全文