在Java中查找hashmap中某些项的数量

时间:2014-02-27 12:35:54

标签: java hashmap

我有一个方法,我用它来计算hashmap中的项目:

public void getAvailable(final Item item) {
    System.out.println("\n" + "Item's \"" + item.getItemName() + "\" stock");
    System.out.println("Name\tPrice\tAmount");
    for (Map.Entry<Item, Integer> entry : stockItems.entrySet()) {
        System.out.println(entry.getKey() + "\t" + entry.getValue());
    }
}

但是如果我指定了密钥item,我怎样才能在hashmap中找到具有该密钥的所有项目的数量?此刻,它会返回所有带有不同键的项目。

4 个答案:

答案 0 :(得分:1)

how can I find the amount of all the items with that key in the hashmap?

Hash Map键是唯一值。对于任何value,您只有一个key

答案 1 :(得分:1)

我必须猜测你想要实现的目标,所以我假设如下:

  • 您的地图密钥是Item
  • 的实例
  • 您只有密钥item,并希望在地图中找到相应的条目

你能做的是:

  1. 使用单独的映射到密钥的Item实例,并使用它来访问计数映射
  2. 创建一个“虚拟”(查询)项目,该项目仅获取equals()hashCode方法中使用的数据并使用该数据访问计数地图
  3. 1。的例子:

     Map<String, Item> items = ...;
    
     Integer quantity = stockItems.get(items.get("item"));
    

    2。的例子:

    class Item {
      private String key;
      public Item(String key) {
        this.key = key;
      }
      ...
    
      //equals() and hashCode() should only use the key field
    }
    
    Integer quantity = stockItems.get( new Item("item") );
    

    <强>更新

    如果键不是项目的唯一属性,则必须遍历地图中的所有条目,检查项目的键以获得匹配并自行创建总和。

答案 2 :(得分:1)

以下是否会成为您追求的目标?

public int getAvailable(final Item item) {
    int count = 0;
    String itemName = item.getItemName();
    for (Map.Entry<Item, Integer> entry : stockItems.entrySet()) {
        Item i = entry.getKey();
        if(itemName.equals(i.getItemName())) {
          count += entry.getValue();
        }
    }
    return count;
}

编辑:编辑计数从0开始

答案 3 :(得分:0)

密钥在散列映射中是唯一的。因此,您的特定密钥只能有一个值。