在java中合并类似的HashMaps

时间:2016-08-04 23:22:42

标签: java hashmap

HashMap<String, String> hashMap1

       name : ranjith
       city : san jose

HashMap<String, String> hashMap2

       name : sandeep
       city : san jose

HashMap<String, String> hashMap3

       name : rohith
       city : san jose

我想将上面的哈希映射转换为HashMap<String, List<String>> hashMap4

      name : [ranjith, sandeep, rohith]
      city : [san jose]

要做到这一点,合并是有任何直接的方法,或者我应该通过迭代每个元素,找到相似之处然后合并

1 个答案:

答案 0 :(得分:4)

这将收集到Map<String, Set<String>>,这似乎比列表更合适,因为您正在收集唯一值。它使用静态导入java.util.stream.Collectors.*

Map<String, Set<String>> hashMap4 = Stream.of(hashMap1, hashMap2, hashMap3)
        .map(Map::entrySet)
        .flatMap(Set::stream)
        .collect(groupingBy(Map.Entry::getKey, mapping(Map.Entry::getValue, toSet())));

这是Java 7版本。不是那么干净简洁,但仍然不太复杂。

Map<String, Set<String>> hashMap4 = new HashMap<>();
for (Map<String, String> map : Arrays.asList(hashMap1, hashMap2, hashMap3)) {
    for (Map.Entry<String, String> entry : map.entrySet()) {
        String key = entry.getKey();
        Set<String> values = hashMap4.get(key);
        if (values == null) {
            hashMap4.put(key, values = new HashSet<>());
        }
        values.add(entry.getValue());
    }
}