2010-03-19 49 views
0

的新實例,我已經得到了HashMap的簡稱銷售(it is Map<String, Set<String>>)的現有實例我用它來記錄客戶和項目的歷史。倒車鍵/值 - 創建的HashMap

有沒有一種方法來創建的HashMap的新實例,能夠有效逆轉這種用法?即將每件物品作爲一個唯一的鑰匙購買,並將相應的價值顯示爲購買該產品的顧客的字符串集合。我懷疑有一個簡單的過程使用keySet()以某種方式迭代銷售映射,但我無法看到如何執行此操作。 任何幫助將不勝感激。

回答

0

你的意思是你想要一些像Map,String>的東西!

THN你可以遍歷現有的地圖,在新地圖放顛倒鍵值

例子:

Map<Set<String>, String> somemap = new HashMap<Set<String>, String>(); 
foreach(Map.entry entry : existingMap.entrySet()) { 
    Set<String> value = entry.getValue(); 
    String key = entry.getKey(); 
    somemap.put(value,key); 

} 
+0

我認爲他也想「轉置」,每個Set 條目成爲他們自己的關鍵字成客戶名稱的多圖。結果仍然應該是Map >。 – Thilo 2010-03-19 07:50:13

+1

或者可能不是,因爲他接受了你的答案;-) – Thilo 2010-03-19 07:53:37

+1

好吧,如果這是正確的答案,那麼問題就寫錯了。這絕對不是「每件商品作爲唯一的鑰匙購買」 – 2010-03-19 08:27:46

2

我認爲這將是更多的類似的東西:

Map<String,Set<String>> result = new HashMap<String,Set<String>>(); 
for (Map.Entry<String,Set<String>> entry: salesMap.entrySet()) { 
    String cust = entry.getKey(); 
    Set<String> items = entry.getValue(); 
    for (String item: items) { 
     Set<String> customers = result.get(item); 
     if (customers == null) { 
      customers = new HashSet<String>(); 
      result.put(item, customers); 
     } 
     customers.add(cust); 
    } 
}