如何替换Object对象中的一个值?HashMap<String, Object>

9
Map<String, Data> map = new HashMap<String,Data>();
map.put("jan", new Data("RED","M4A1",5,0,0));

我如何更改Data对象的RED值,而不必将所有带有该键的信息取出并放回去,就像这样:

map.put("jan" new Data("Blue",
      map.get("jan").Brand,
      map.get("jan").Storage,
      map.get("jan").Sold,
      map.get("jan").Bought)); 

那么我该如何改变数据对象中的一个值,而不必全部重新做一遍呢?
5个回答

12

这取决于 Data 是否可变。例如,你可能可以写出以下代码:

Data data = map.get("jan");
data.setColor("Blue");

不要忘记,地图中只包含对对象的引用,因此如果您更改对象内部的数据,则稍后从地图获取引用时将看到该更改。

或者,如果它是不可变的,它可能会有一个withColor方法,因此您可以编写:

Data data = map.get("jan");
map.put("jan", data.withColor("Blue"));

如果不了解你的Data类型(我希望这不是你类的真实名称),很难再做更多的解释。

(我也希望你的类没有在字段上使用帕斯卡式大小写,而且我希望这些字段是私有的,但这是另一回事……)


如果我理解正确,OP不想获取操作等。 - kosa
@Nambari “不想通过键获取所有信息再将其放回地图中” 我的理解是他不想创建新对象并将它们“put”回地图中。 - Brian
看起来是可变的。第一个选项完成了任务。谢谢。 - user1621988

4
假设 Data 是可变的,你可以设置 "RED" 字段:
Map map = new HashMap();
map.put("jan", new Data("RED","M4A1",5,0,0));
// Later...
map.get("jan").setColor("BLUE");

如果 Data 不可变,则您唯一的选择是按照您编写的方式进行 put 新值。

2

在您的Data类中添加适当的setter方法,例如:

class Data {
    setColor(String color){...}
}


map.get("jan").setColor("BLUE");

1
假设 Data 对象有一个用于设置 color 属性的 setter:
public class Data {
  private String color;

  public void setColor(String color) {
    this.color = color;
  }
}

您可以直接获取所需的“Data”对象并设置其属性:get
Data data = map.get("jan");
data.setColor("blue");

0

请查找代码片段:

Map<String, Data> map = new HashMap<String,Data>();

public class Data{

private String color;

  public void setColor(String color) {
    this.color = color;
  }

public String getColor() {
    return this.color;
  }

publicData(String color){
this.setColor(color);
}
}


map.put("jan", new Data("RED","M4A1",5,0,0));

现在你可以这样做:

Data data = map.get("jan");
data.setColor("black");

这会起作用。

这里的Data类仅包含一个字段,即color。您可以添加更多字段。 谢谢


你能进一步解释你的答案吗? - Code-Apprentice
糟糕的代码片段,不良实践。在你的例子中,数据是可变的,所以你不需要将引用作为值放回到映射中,因为通过get()获取的引用不会改变。 - Csaba Tenkes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接