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

标签 java algorithm data-structures nested hashmap

我想创建一个嵌套的HashMap:

var myHashMap = new HashMap<String, HashMap<String, int>>();

并且我想将记录插入到内部 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);
}

有没有更好的方法来做到这一点,而不需要为每个唯一的myHashMap(外部HashMap)键实例化一个新的innerHashMap

最佳答案

您可以使用Java 8方法computeIfAbsent() 。它需要一个,一个函数,如果给定的键不存在于 map 中,该函数将被触发并生成一个值。

请注意,此方法将返回当前与给定键关联的值,即先前存在的内部映射,或作为以下结果生成的映射方法执行。

Map<String, Map<String, Integer>> nestedMap = new HashMap<>();

nestedMap.computeIfAbsent(outerKey,k -> new HashMap<>())
    .put(innerKey, someValue);

另请注意:

  • 无法使用像 int 这样的基元作为泛型类型参数。通用参数应该是一个对象(了解更多信息, see )

关于java - 如何向嵌套 HashMap 中插入记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72234600/

相关文章:

data-structures - Bε 树有专利保护吗?

c++ - 什么是基于集合的数据结构

java - Classifier4j 输出有缺陷

java - 捕获 Java Hashmap 中的错误条件

c++ - 计算许多数字的几何平均值的有效方法

python - 查找可以最快说出的单词和单词组合

c++ - 如何从 CGAL::Triangulation_3 有效访问 std::list 中的顶点的 vertex_handle?

java - 在 Eclipse 中查看 JSP 页面中的 BIRT 报告时出现错误 404

Java : In ConcurrentHashMap , 如果我更改 key ,为什么会有不同的输出

c - 为什么空闲列表没有排序?