class Student_Details{
String name;
int rollNumber;
String address;
// setter and getter of above data members
}
HashMap<String,Collection<Student_Details>> oldData;
HashMap<String,Collection<Student_Details>> newData;
假设HashMAp oldData中的值为:
abc:[{sam,12,newyork},{mike,15,gotham}]
xyz:[{riphunter,32,new york}]
Hashmap newData包含:
abc:[{sam,12,newyork},{mike,17,London},{john,36,boston]
uvw:[{rip,39,boston}]
要做的事: 1)如果newData中的key不存在于oldData中,则将键值添加到oldData 2)如果oldData中存在的newData的键然后更新Collection的内容,其中name不应该更改。例如,上面示例的最终地图(oldData)应具有以下内容
abc:[{sam,12,newyork},{mike,17,London},{john,36,boston}]
xyz:[{riphunter,32,new york}]
uvw:[{rip,39,boston}]
请帮我解决方案......谢谢
答案 0 :(得分:0)
您可以使用putAll()
来实现
将指定地图中的所有映射复制到此地图。这些映射将替换此映射对当前位于指定映射中的任何键的任何映射。
我在这里写了一个示例,我使用map1
和map2
来模拟您的oldData
和newData
。
putAll()
是put
方法的换行,循环put
操作。以下是put()
将指定的值与此映射中的指定键相关联。如果地图以前包含该键的映射,则替换旧值。
因此,如果密钥存在,它将更新值,否则它将存储新密钥和新值
Map<String, String> map1 = new HashMap<>();
Map<String, String> map2 = new HashMap<>();
map1.put("a", "1");
map1.put("b", "2");
map1.put("c", "3");
map2.put("a", "10");
map2.put("d", "4");
Map<String, String> temp = new HashMap<>();
temp.putAll(map1);
temp.putAll(map2);
temp.forEach((k,v) -> System.out.println("Key:" + k + ", Value:" +v));
输出结果为:
Key:a, Value:10
Key:b, Value:2
Key:c, Value:3
Key:d, Value:4
答案 1 :(得分:-3)
首先,地图的关键字应该是学生的name
。现在
然后为每个新生做这个
oldMap.put (newStudent.getName(), newStudent);
它会做什么是添加newStudent。如果拥有此密钥的学生不存在,则会另外添加,此新值将替换之前的值,因为它的HashMap不支持重复值