有没有办法直接将键值对添加到嵌套HashMaps中的所有哈希值

时间:2014-05-19 16:20:40

标签: java hashmap

我已经嵌套了HashMaps:

Map<String, Map<String, String>> nestedMap;

我想在map.put("Hello","All")中的每个HashMap上执行nestedMap

有没有办法在不迭代nestedMap的情况下完成?

3 个答案:

答案 0 :(得分:3)

没有迭代,无论是显性的还是隐含的,都是不可能的。但是,它并不复杂;只是迭代Map#values()返回的集合:

for(Map<String, String> map : nestedMap.values())
    map.put("Hello", "All");

在Java 8中,您也可以这样做:

nestedMap.forEach((k,v) -> v.put("Hello", "All"));

答案 1 :(得分:1)

我不知道因为Map的值类型是通用的,意味着Map不能公开这样的方法,因为无法保证该值实际上是一个映射。事实上,它往往不是Map

然而,好消息是,通过Map.values()调用的foreach循环,循环应该相当简单。

for (Map<String, String> innerMap : nestedMap.values()) {
    innerMap.put("Hello", "All");
}

答案 2 :(得分:0)

@arshajii是完全正确的。但另一件需要注意的事情是,如果这种全局映射变得普遍,那么通过考虑设计解决方案可能会获胜。对于顶级映射,显式实现全局映射。像这样:

class MapWithGlobalPairs<Key, Value> extends HashMap<Key, Value> {
  private final HashMap<Key, Value> globalMap = new HashMap<>();

  public void putGlobal(Key key, Value val) {
    globalMap.put(key, val);
  }

  @Override
  public Value get(Key key) {
    Value val = globalMap.get(key);
    if (val == null)
      val = super.get(key);
    return val;
  }
}

这是未经验证的代码。我提前为愚蠢的错误道歉。