我已经嵌套了HashMaps:
Map<String, Map<String, String>> nestedMap;
我想在map.put("Hello","All")
中的每个HashMap上执行nestedMap
。
有没有办法在不迭代nestedMap
的情况下完成?
答案 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;
}
}
这是未经验证的代码。我提前为愚蠢的错误道歉。