在Java中组合两个hashMap对象时如何合并列表

How merge list when combine two hashMap objects in Java

本问题已经有最佳答案,请猛点这里访问。

我有两个HashMap定义如下:

1
2
HashMap<String, List<Incident>> map1 = new HashMap<String, List<Incident>>();
HashMap<String, List<Incident>> map2 = new HashMap<String, List<Incident>>();

另外,我有一个第3个HashMap对象:

1
HashMap<String, List<Incident>> map3;

和两者结合时的合并列表。


总之,你不能。 map3没有正确的类型来将map1和map2合并到其中。

但是,如果它也是HashMap>。 您可以使用putAll方法。

1
2
3
map3 = new HashMap<String, List<Incident>>();
map3.putAll(map1);
map3.putAll(map2);

如果要合并HashMap中的列表。 你可以这样做。

1
2
3
4
5
6
7
8
9
10
11
map3 = new HashMap<String, List<Incident>>();
map3.putAll(map1);
for(String key : map2.keySet()) {
    List<Incident> list2 = map2.get(key);
    List<Incident> list3 = map3.get(key);
    if(list3 != null) {
        list3.addAll(list2);
    } else {
        map3.put(key,list2);
    }
}


创建第三个地图并使用putAll()方法从ma添加数据

1
2
3
4
5
6
7
HashMap<String, Integer> map1 = new HashMap<String, Integer>();

HashMap<String, Integer> map2 = new HashMap<String, Integer>();

HashMap<String, Integer> map3 = new HashMap<String, Integer>();
map3.putAll(map1);
map3.putAll(map2);

对于map3,您有不同的类型,如果这不是错误的话,那么您需要使用EntrySet遍历两个地图


使用commons集合:

1
Map<String, List<Incident>> combined = CollectionUtils.union(map1, map2);

如果你想要一个Integer映射,我想你可以将.hashCode方法应用于Map中的所有值。


HashMap有一个putAll方法。

请参考:
http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html