当前位置: 首页 > 知识库问答 >
问题:

合并具有重复键和更新值的两个HashMaps

别峻
2023-03-14
class MyObject
String name;
int counter;

MyObject(String name) {
this.name = name;
this.counter = 1;
}

// getters and setters...
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.

共有1个答案

耿运浩
2023-03-14

您可以按以下方式进行:

  • 对两个条目集进行流式传输。
  • 收集到地图
  • 并在合并方法期间添加它们

创建一些数据

HashMap<String, MyObject> map1 = new HashMap<>();
HashMap<String, MyObject> map2 = new HashMap<>();

map1.put("A", new MyObject(2));
map1.put("B", new MyObject(4));
map1.put("C", new MyObject(10));
map2.put("C", new MyObject(10));
map2.put("B", new MyObject(8));
Map<String, MyObject> result = Stream
        .concat(map1.entrySet().stream(),
                map2.entrySet().stream())
        .collect(Collectors.toMap(Entry::getKey,
                Entry::getValue, (a, b) -> {
                    a.setCounter(a.getCounter() + b.getCounter());
                    return a;
                }, HashMap::new));

result.entrySet().forEach(System.out::println);
A=2
B=12
C=20
        Map<String, MyObject> result = Stream.of(map1,map2)
                .flatMap(map->map.entrySet().stream())
                .collect(...);
    
 class MyObject {
    
    int value;
    public MyObject(int v) {
        this.value = v;
    }
    public int getCounter() {
        return value;
    }
    
    public void setCounter(int a) {
        value = a;
    }
    
    public String toString() {
        return value + "";
    }
}
 类似资料:
  • 我有两张阵列图。 有没有办法用流来完成这个任务? 或者我必须通过映射迭代?

  • 问题内容: 我正在尝试更新具有两个主键的Model。 模型 移民 这是应该更新库存模型的代码,但不是。 我收到此错误: 我也尝试使用updateOrCreate()方法。它不起作用(我得到同样的错误)。 谁能告诉我们应该如何更新带有两个主键的Model? 问题答案: 我已经遇到过几次这个问题。您需要覆盖一些属性: 和方法(功劳): 请记住,此代码需要引用Eloquent Builder类, 我建议

  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 问题内容: 这个问题已经在这里有了答案 : 在Java中将两个arrayList合并到一个新的arrayList中,没有重复且没有顺序 (14个答案) 7年前关闭。 我有两个arrayLists 我想要我的最终ArrayList,其中将包含一个元素的 所有 元素以及仅包含两个元素而不包含一个元素的元素。 因此ArrayList final = {A,B,C,D,E,F,G}。 我怎样才能做到这一点

  • 我严重卡在一张有复合钥匙的桌子上。我试图用雄辩的口才通过两个主键过滤记录。但是我开始知道雄辩不支持复合键。我经历了许多解决方案,但没有一个解决方案足够清晰,让初学者理解。 解决方案代码表示使用以下代码编辑模型类: 我想使用laravel提供的资源控制器执行更新功能:我的代码如下所示: 另外,请指导我如何使用带有主键的资源控制器,因为它会为一些参数抛出错误?请帮帮我。我读了很多在线文章,真的很累,但

  • 我想同时执行两个流,并生成作为前两个流的组合的第三个流 我想从这两个中生成一个新的,它将与这一个等价 我目前找到的是或