java - 无法将值添加到我的嵌套 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);
^_ _ _ _ _ _ _ _ _^
解决方案
您声明循环控制变量 的方式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);
}
}
推荐阅读
- flexbox - 如何计算弹性项目的宽度?以及它如何受其子项宽度的影响?
- javascript - 我是否将我的(大部分)静态网站放在 public/ 文件夹或 index.js 中?
- javascript - 如何从标题中删除 CSS
- mysql - 使用 Unix TimeStamp 格式的数据计算每月行数的 SQL 查询
- javascript - 如何在 JavaScript 中将引用参数作为 PHP 传递?
- node.js - 在 GJS 中使用 Node.js 库
- c - 在矩阵中添加邻居的总和并制作一个新矩阵
- c# - Asp.Net Core 3.x - 如何更改 Linq 表达式以在列表中包含搜索
- python - 设置允许任何客户端连接的服务器
- javascript - 统一数组中的对象,获取总数