0

这是一个示例方法:

public void loadStuff(Map<String, Object> someMap) {
  Map<String, Object> myMap = new HashMap<String, Object>();

  //I now load defaults here first
  myMap.put("One", someObject);
  myMap.put("two", someObject);
  myMap.put("three", someObject);

  //Now I put the entire someMap so that only those keys that are present in someMap are overridden in myMap and others remain default.
  myMap.putAll(someMap);
}

现在,是否有更好的方法来执行这些冗余放置,因为我的场景中的默认数量很多。

4

2 回答 2

2

考虑使用您的默认值创建一个初始地图,然后使用:

// Alternatively, you could use clone()
Map<String, Object> myMap = new HashMap<String, Object>(defaults);
myMap.putAll(someMap);

除了任何其他意味着您可以从属性文件或其他任何内容加载“默认地图”。

如果您真的不喜欢它将每个值放置两次的事实,您可以编写一个循环来检查每个键 - 但我个人只是使​​用上面的代码。这很简单,应该可以正常工作。

于 2013-07-31T22:10:33.757 回答
1

您是想为几个项目预加载一个答案,还是想为所有未找到的键设置一个默认值?如果您想将默认答案从更改null为其他内容,请参阅此问题。如果您想预加载一些项目,那么您将需要put所有项目,但最好不要将这些值嵌入到这样的代码中;使用for循环来迭代单个官方的键列表。

如果您要Map经常初始化它的空白副本,那么拥有一个模板会更有意义Map,每个模板myMap 都是由; 包装为HashMap不可修改的或番石榴ImmutableMap都是不错的选择。从预先存在的元素构建Map而不是将所有元素复制到新元素中HashMap效率更高,因为新元素知道自己制作多大。

于 2013-07-31T22:13:36.610 回答