【问题标题】:How to copy a Map<object, Object> in java?如何在 java 中复制 Map<object, Object>?
【发布时间】:2021-03-21 18:06:45
【问题描述】:

我使用此链接中的代码link

这是我在项目中使用的代码

 public static Map<Coordinate, Field> copy(Map<Coordinate, Field> original) {
    Map<Coordinate, Field> copy = new HashMap<>();
    for (Map.Entry<Coordinate, Field> entry : original.entrySet()) {
        copy.put(entry.getKey(), entry.getValue());
    }
    return copy;
}

但它不起作用,所以我使用了另一个

Map<Coordinate, Field> temp = board.entrySet().stream()
            .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));

但是还是不行,请问有没有其他方法可以复制一个Map?还是我做错了什么?

【问题讨论】:

  • “不起作用”是什么意思?
  • 在我们可以轻松运行的精简示例中提供源代码。将问题归结为核心meta.stackexchange.com/questions/22754/…(您得到的所有反对票都是因为您的问题太宽泛,没有SSCCE,没有显示您尝试过,因此我们无法提供好的解决方案。更新您的问题)。
  • 我想制作地图的深层副本,但即使我使用此链接中的代码,它仍然是浅层副本。当我更改一个地图的元素时,该元素也将在另一张地图中更改
  • 抱歉我对stackoverflow不太熟悉

标签: java hashmap copy


【解决方案1】:

您需要创建 Field 对象的副本(可能还需要创建 Coordinate 对象的副本),而不是将相同的键和值放入新映射中。

如何创建对象的副本取决于类的设计。例如,创建一个复制构造函数。

public static Map<Coordinate, Field> copy(Map<Coordinate, Field> original) {
    Map<Coordinate, Field> copy = new HashMap<>();
    for (Map.Entry<Coordinate, Field> entry : original.entrySet()) {
        Field newField = new Field(entry.getValue()); // make copy here
        copy.put(entry.getKey(), newField);
    }
    return copy;
}

使用 StreamAPI

Map<Coordinate, Field> copy = original.entrySet().stream()
            .collect(Collectors.toMap(e -> e.getKey(), e -> new Field(e.getValue)));

【讨论】:

  • 好答案。简短而准确。
猜你喜欢
  • 2013-06-16
  • 2020-07-14
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多