代码之家  ›  专栏  ›  技术社区  ›  Gakuo

Java调整嵌套Hashmap值

  •  0
  • Gakuo  · 技术社区  · 6 年前

    我试图使用此处给出的想法来调整嵌套哈希映射,但我的解决方案不起作用: 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需要一个hashmap,但得到一个整数。我不明白这是怎么回事。

    4 回复  |  直到 6 年前
        1
  •  1
  •   Dinesh    6 年前

    put in HashMap返回Value对象,在本例中为整数。您正在尝试将此整数分配给哈希映射。删除分配,代码将正常工作。替换

    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);    
            }
    
        2
  •  3
  •   curlyBraces    6 年前

    HashMap的put方法不返回HashMap。它返回值。因此,这一行是不正确的:

        HashMap updatedItems= items.put(itemName,items.get(itemName)+x);
    

    返回类型将是整数,因为项映射是 <String, Integer> 键入。

        3
  •  2
  •   dunni    6 年前

    你写的

    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);
    
        4
  •  2
  •   Rishikesh Dhokare    6 年前

    请参阅文档以了解 put -

    返回:与键关联的上一个值,如果存在 没有密钥映射。(空返回也可以指示映射 如果实现支持 空值。)

    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);