【发布时间】:2021-06-22 06:38:54
【问题描述】:
我有两个 HashMap,它们的键是 String,值是 MyObject。我的目标是合并这两个哈希图,然后返回一个包含所有对象的哈希图到映射。但如果键(字符串)相同,则具有相同键的实例应存储为相同的 MyObject。我已经成功地做到了。
我的问题是我想用相同的键更新实例内的字段。
class MyObject
String name;
int counter;
MyObject(String name) {
this.name = name;
this.counter = 1;
}
// getters and setters...
我的目标是每次哈希图中的键相同时更新 int 计数器。
这段代码将成功合并这两个映射,我似乎不知道每次 MyObject 具有相同的键时如何更新 MyObject 中的字段 int 计数器。
class Main
HashMap<String, MyObject> map1 = new HashMap<>();
HashMap<String, MyObject> map2 = new HashMap<>();
//some code that will put some instances of MyObject into map1 and map2
// assume that least three instances have the same keys
HashMap<String, MyObject> map3 = new HashMap<>(map1);
map2.forEach((key, value) -> map3.merge(key, value, (v1, v2) -> new MyObject(v1.getName())));
假设这两个对象有相同的键;
MyObject.getCounter() = 3 in map1
MyObject.getCounter() = 5 in map2
The new MyObject.getCounter() should be 8.
【问题讨论】:
-
"具有相同键的实例应存储为相同的 MyObject" - 如果实例具有相同的键,您希望如何选择要存储的
MyObject的哪个实例? -
存储哪个 MyObject 实例无关紧要,无论如何都不是针对这个特定问题。
-
合并时添加两个对象的计数器?