Java调整嵌套的Hashmap值
Posted
技术标签:
【中文标题】Java调整嵌套的Hashmap值【英文标题】:Java adjusting nested Hashmap value 【发布时间】:2019-01-16 10:24:12 【问题描述】:我试图使用此处给出的想法来调整嵌套哈希图,但我的解决方案不起作用:How to update a value, given a key in a java hashmap?。我的嵌套哈希图是shoppingLists
。它包含购物清单listID
的外部哈希图作为键和项目的哈希图作为值。 items hashmap包含itemName
作为键和项目的数量作为值。 adjustItemAmount
尝试将项目的数量调整为给定数量 x
。
HashMap<String, HashMap<String, Integer>> shoppingLists = new HashMap<>();
public void adjustItemAmount(String itemName, int x, String listID)
int current_amount = shoppingLists.get(listID).get(itemName);
HashMap<String, Integer> items = shoppingLists.get(listID);
HashMap updatedItems = items.put(itemName, items.get(itemName) + x);
shoppingLists.put(listID, updatedItems);
HashMap updatedItems = items.put(itemName,items.get(itemName)+x);
行指出 Java 需要一个 hashmap 但得到一个整数。我不明白这是怎么回事。
【问题讨论】:
那么,这段代码有什么问题? 编辑问题以表明问题。 “声明 Java 需要一个哈希图但得到一个整数”是什么意思?如果您遇到异常,请发布完整的详细信息:异常类型、消息和堆栈跟踪。另外,请创建一个reproducible example。目前,如果不对您的数据做出假设,我们就无法执行您的代码。 【参考方案1】:HashMap 的 put 方法不返回 HashMap。它返回值。因此这一行是不正确的:
HashMap updatedItems= items.put(itemName,items.get(itemName)+x);
返回类型将是整数,因为项目映射是 <String, Integer>
类型。
【讨论】:
【参考方案2】:你写
HashMap updatedItems= items.put(itemName,items.get(itemName)+x);
但是 put 方法返回键的先前值,该值已更新,如果没有值,则返回 null,而不是 HashMap。见https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#put-K-V-
换行
Integer addedValue = items.put(itemName,items.get(itemName)+x);
或者只是
items.put(itemName,items.get(itemName)+x);
【讨论】:
【参考方案3】:请参阅put
的文档 -
返回:与键关联的前一个值,如果存在则返回 null 没有键映射。 (返回 null 也可以表示地图 如果实现支持,则以前将 null 与键关联 空值。)
https://docs.oracle.com/javase/7/docs/api/java/util/Map.html#put(K,%20V)
所以,这个
HashMap updatedItems= items.put(itemName,items.get(itemName)+x);
编译会失败,不能返回HashMap
,但会返回Integer
相反,应该是-
Integer updatedItems= items.put(itemName,items.get(itemName)+x);
【讨论】:
【参考方案4】:放入 HashMap 返回 Value 对象,在本例中为 Integer。您正在尝试将此 Integer 分配给 HashMap。删除分配,您的代码将起作用。替换
public void adjustItemAmount (String itemName, int x,String listID)
int current_amount = shoppingLists.get(listID).get(itemName);
HashMap <String,Integer> items = shoppingLists.get(listID);
items.put(itemName,items.get(itemName)+x);
shoppingLists.put(listID,items);
【讨论】:
以上是关于Java调整嵌套的Hashmap值的主要内容,如果未能解决你的问题,请参考以下文章
java 18 - 9 HashMap和ArrayList的嵌套3
java 18 - 7 HashMap和ArrayList的嵌套1