合并LinkedHashMap的Map

时间:2013-08-31 11:34:25

标签: java hashmap

我有两个这个格式的LinkedHashMap Map ==&gt; Map<String,LinkedHashMap<String,String>> m1&amp; m2具有相同的键值,我们如何结合这个m1&amp; m2和m3制作所有元素。  注意:你能不能给我一个psuedocode我会实现它。谢谢。

输入格式如下:

m1={1={rollno=1,name=chris,height=7ft},2={rollno=2,name=stephen,height=6ft}}
m2={1={rollno=1,name=chris,weight=65},2={rollno=2,name=stephen,weight=73}}

输出:

     m3={1={rollno=1,name=chris,height=7ft,weight=65},2={rollno=2,name=stephen,height=6ft,weight=73}}

我尝试了什么:

private static Map<String, LinkedHashMap<String, String>>  mergeMap(Map<String,LinkedHashMap<String, String>> m1, Map<String, LinkedHashMap<String, String>> m2) { 

    Map<String,LinkedHashMap<String, String>> newMap = new LinkedHashMap<String, LinkedHashMap<String, String>>(m1);
    for (Map.Entry<String, LinkedHashMap<String, String>> entry : m2.entrySet()) {
        LinkedHashMap<String, String> t1=newMap.get(entry.getKey());
        newMap.putAll(m2);
    }

    System.out.println("ouput :"+newMap);
    return newMap;
}

2 个答案:

答案 0 :(得分:3)

您可以按照以下步骤合并地图:

  1. 首先创建一个newMap,将第一个地图 - map1作为参数传递。您必须使用重载的构造函数 - LinkedHashMap(Map)。现在您有一张包含map1所有元素的地图。你的一半工作已经完成。

    Map<String, Map<String, String>> newMap = new LinkedHashMap<>(map1);
    
  2. 然后您需要将元素从第2个地图移动到newMap。为此,您需要迭代map2。您可以使用Map#entrySet()方法迭代map2中的每个条目。然后,您将使用Map.Entry#getKey()Map.Entry#getValue()方法分别获取每个条目的键和值。

    • 对于map2中的每个密钥,从newMap获取当前值,并将map2的值与newMap中的值合并。这两个值均为Map。您可以使用Map#putAll()方法合并两个地图。它会自动忽略已有的密钥,并添加额外的键值对。

  3. 现在,在解决上述问题后,您应该考虑更改数据结构。您应该创建一个类Person,以存储所有这些属性,并维护Map<Integer, Person>,其中密钥为rollNo

    你所展示的就是你所拥有的。如果您可以解释其他一些细节,例如,从何处获取这些地图,以及为什么您可能将同一个人的属性分布在两个不同的地图中,我们可以帮助您更好地正确地制定数据结构。如果您拥有较少的数据集,则可能会处理嵌套的Map,但如果您拥有更大的数据集,则在处理它们时将面临困难。你当然应该遵循面向对象的方法。

答案 1 :(得分:0)

您应该使用java对象来存储完整的信息。

喜欢

class Student{
   int rollNo; 
   String name;
   String height;
   String weight;
} 

并存储您的元素,如

Map<Integer,Student> map = new HashMap<Integer,Student>();

合并,存储和管理这样的元素

会很容易