如何向嵌套 HashMap 中插入记录?

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)键实例化一个新的?

Ale*_*nko 5

您可以使用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泛型类型参数。通用参数应该是一个对象(有关更多信息, 请参阅