我试图使用此处给出的想法来调整嵌套的哈希图,但我的解决方案不起作用:How to update a value, given a key in a java hashmap?。我的嵌套哈希图是shoppingLists
。它包含购物清单listID
的外部哈希图作为键,以及商品的哈希图作为值。项目哈希图包含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需要一个哈希图,但得到一个整数。我不知道是怎么回事。
答案 0 :(得分:3)
HashMap的put方法不返回HashMap。它返回值。因此,这行是不正确的:
HashMap updatedItems= items.put(itemName,items.get(itemName)+x);
返回类型为Integer,因为项目映射为<String, Integer>
类型。
答案 1 :(得分: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);
答案 2 :(得分:2)
请参阅put
-的文档
Returns:与key关联的先前值;如果有,则返回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);
答案 3 :(得分:1)
put返回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);
}