2014-02-27 36 views
0

我有一個方法,我用它來計算一個HashMap中的物品:查找某個項目的數量在HashMap中使用Java

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,我怎麼能找到散列表中的所有項目的密鑰數量?此刻它將所有物品以不同的鍵返回給我。

+0

是不是有隻用鑰匙'item'一個_single_項目?或者只是項目的關鍵部分? – Thomas

+0

'stockItems.get(item)'會給你你需要的東西。 – StephaneM

回答

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開始

+0

爲什麼'int count = 1;'?你應該用0初始化它。 – Thomas

+0

這正是我的意思,但正如前面的評論所提到的,計數應該初始化爲0以給出想要的結果。 – danrodi

+0

好點,編輯 – PDStat

1

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

Hash Map關鍵是獨特的價值。對於任何key,您將只有一個value

+0

我寧願用相同的值來說,例如,如果在散列映射中有一個名爲Milk的項目,其數量爲1,並且在散列映射中名爲Milk的項目的數量爲3,那麼它總共返回4. – danrodi

+0

@danrodi所以這些項目有相同的名稱,但仍然不同?如果是這樣,有什麼區別? – Thomas

0

密鑰在散列圖中是唯一的。所以你的專用密鑰只能有一個值。

1

我猜你想實現,所以我認爲以下的內容:

  • 地圖鍵的Item
  • 情況下,你只能有鑰匙item,並希望找到相應的條目在地圖

你可以做的是:

  1. 使用單獨的映射到密鑰的Item實例並使用它訪問計數映射
  2. 創建一個「虛擬」(查找)項目,該項目僅獲取在equals()hashCode方法中使用的數據並使用該數據訪問計數映射

實施例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")); 

更新

如果該鍵不是一個項目的唯一屬性,你必須遍歷所有條目在地圖,檢查項目的關鍵的比賽,並創建和你自己。

相關問題