首页 > 解决方案 > 无法将值添加到我的嵌套 HashMap

问题描述

我想访问我的 HashMap 中的键值对,如果它与特定键匹配,我会将项目添加到其对应的值,即 HashMap。

但它只是行不通。这段代码有问题吗?

当使用非嵌套 HashMap 时,“for-loop”工作得非常好。

import java.util.Map;
import java.util.HashMap;

Map<String, Map<String,Integer>> map = new HashMap<>();
map ==> {}

map.put("one", new HashMap<>())
$4 ==> null

map.put("two", new HashMap<>())
$5 ==> null

map.put("three", new HashMap<>())
$6 ==> null

for (Map.Entry e : map.entrySet()) {
    if (e.getKey().equals("two")) {
         e.getValue()).put("Tony", 123);
    }
}

Error:
cannot find symbol
   symbol: method put(java.lang.String,int)
  (e.getValue()).put("Tony", 123);
  ^_ _ _ _ _ _ _ _ _^

标签: javahashmap

解决方案


您声明循环控制变量 的方式e是阻止e.getValue()返回可识别的值。

您需要参数化Map.Entry

for (Map.Entry<String, Map<String, Integer>> e : map.entrySet()) {
    if (e.getKey().equals("two")) {
        e.getValue().put("Tony", 123);
    }
}

从 Java 10 开始,您还可以使用var,它更干净一些:

for (var e : map.entrySet()) {
    if (e.getKey().equals("two")) {
        e.getValue().put("Tony", 123);
    }
}

推荐阅读