我有两个这个格式的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;
}
答案 0 :(得分:3)
您可以按照以下步骤合并地图:
首先创建一个newMap,将第一个地图 - map1
作为参数传递。您必须使用重载的构造函数 - LinkedHashMap(Map)
。现在您有一张包含map1
所有元素的地图。你的一半工作已经完成。
Map<String, Map<String, String>> newMap = new LinkedHashMap<>(map1);
然后您需要将元素从第2个地图移动到newMap。为此,您需要迭代map2
。您可以使用Map#entrySet()
方法迭代map2
中的每个条目。然后,您将使用Map.Entry#getKey()
和Map.Entry#getValue()
方法分别获取每个条目的键和值。
map2
中的每个密钥,从newMap
获取当前值,并将map2
的值与newMap
中的值合并。这两个值均为Map
。您可以使用Map#putAll()
方法合并两个地图。它会自动忽略已有的密钥,并添加额外的键值对。现在,在解决上述问题后,您应该考虑更改数据结构。您应该创建一个类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>();
合并,存储和管理这样的元素
会很容易