mii*_*722 2 java algorithm nested hashmap data-structures
我想创建一个嵌套HashMap:
var myHashMap = new HashMap<String, HashMap<String, int>>();
Run Code Online (Sandbox Code Playgroud)
我想将记录插入到 inside 中,如果键不存在,HashMap我发现自己需要实例化内部:HashMap
var myHashMap = new HashMap<String, HashMap<String, int>>();
var outerStringValue = "ABC";
var innerStringValue = "XYZ";
var innerInt = 45;
if (!myHashMap.containsKey(outerStringValue) {
var innerHashMap = new HashMap<String, int>();
innerHashMap.put(innerStringValue, innerInt);
myHashMap.put(outerStringValue, innerHashMap);
} else {
myHashMap.get(outerStringValue).put(innerStringValue, innerInt);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点,而不需要innerHashMap为每个唯一myHashMap(外部HashMap)键实例化一个新的?
您可以使用Java 8方法computeIfAbsent()。它需要一个key,一个将被触发的函数,如果给定的键不存在于地图中,它将生成一个值。
请注意,此方法将返回当前与给定键关联的值,即先前存在的内部映射,或作为方法执行的结果生成的映射。
Map<String, Map<String, Integer>> nestedMap = new HashMap<>();
nestedMap.computeIfAbsent(outerKey,k -> new HashMap<>())
.put(innerKey, someValue);
Run Code Online (Sandbox Code Playgroud)
另请注意:
int泛型类型参数。通用参数应该是一个对象(有关更多信息, 请参阅)