0

我有两个这种格式的 LinkedHashMap 映射==> Map<String,LinkedHashMap<String,String>>m1 和 m2 都具有相同的键值,我们如何结合这个 m1 和 m2 并使 m3 与所有元素。 注意:你能给我一个伪代码我会实现它。谢谢。

输入如下格式:

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;
}
4

2 回答 2

3

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

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

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

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

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

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

于 2013-08-31T11:50:35.873 回答
0

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

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

并存储您的元素,例如

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

像这样合并、存储和管理元素会很容易

于 2013-08-31T11:52:58.193 回答