比较两个hashMaps并更新HashMap

时间:2016-07-27 18:07:05

标签: java collections hashmap

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}]

请帮我解决方案......谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用putAll()来实现

  

将指定地图中的所有映射复制到此地图。这些映射将替换此映射对当前位于指定映射中的任何键的任何映射。

我在这里写了一个示例,我使用map1map2来模拟您的oldDatanewData

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不支持重复值

相关问题