【问题标题】:Compare the Two hashMaps and update the HashMap比较两个 hashMap 并更新 HashMap
【发布时间】:2016-07-27 18:07:05
【问题描述】:
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)如果旧数据中不存在新数据的键,则将键值添加到旧数据 2)如果旧数据中存在新数据的键,则更新名称不应更改的集合的内容。例如,上述示例的最终地图(旧数据)应具有以下内容

abc:[{sam,12,newyork},{mike,17,London},{john,36,boston}] 
xyz:[{riphunter,32,new york}]
uvw:[{rip,39,boston}]

请帮我解决...谢谢

【问题讨论】:

标签: java collections hashmap


【解决方案1】:

可以使用putAll()来实现

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

我这里写了一个例子,我用map1map2来模拟你的oldDatanewData

putAll() 是循环put 动作的put 方法的包装。这里是put()的解释

将指定值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

因此,如果key存在,则更新value,否则存储新key和新值

    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

【讨论】:

  • 这里你正在使用作为字符串的键和作为字符串的值,但我应该有一个字符串和 Collection 的映射,我需要比较两个映射的集合,即 oldData 和新数据
  • @adi2380 你自己试过了吗?这是相同的。值的类型无关紧要。
  • putAll 将替换 map1 中的整个键/值对,如果键相同,则添加 map2 中的键/值对。请看看我上面提到的例子。
【解决方案2】:

首先地图的键应该是学生的name。现在

然后对每个新学生都这样做

oldMap.put (newStudent.getName(), newStudent);

它会做的是添加 newStudent。如果拥有这个键的学生不存在,那么它将被添加,否则这个新值将替换以前的值,因为它是一个不支持重复值的 HashMap

【讨论】:

  • map的key是abc,与学生姓名无关。
  • key不能是学生姓名..假设key是学校的名字那么学生的数据即姓名roll,address应该是值.而且只有roll no和address应该更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多