反转键/值 - 创建HashMap的新实例

时间:2010-03-19 07:39:21

标签: java hashmap

我有一个现有的HashMap实例,简称为sale (it is Map<String, Set<String>>)我用它来记录客户和项目历史记录。

有没有办法创建HashMap的新实例,有效地逆转了这种用法?即将显示作为唯一键购买的每个项目,并将相应的值显示为已购买该产品的客户的字符串集。我怀疑有一个简单的过程使用keySet()以某种方式迭代销售地图,但我只是看不到如何做到这一点。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

你的意思是你想要一些像Map,String&gt; !!

您可以迭代现有地图并将反转的键值放入新地图

示例:

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

}