【问题标题】:reversing keys/values - create new instance of HashMap反转键/值 - 创建 HashMap 的新实例
【发布时间】:2025-11-24 20:55:02
【问题描述】:

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

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

【问题讨论】:

    标签: java hashmap


    【解决方案1】:

    我认为它会更像这样:

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

    【讨论】:

      【解决方案2】:

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

      然后您可以遍历现有地图并将反转的键值放入新地图中

      例子:

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

      【讨论】:

      • 我认为他还想“转置”,每个 Set 条目都成为他们自己的键,进入客户名称的多重映射。结果应该仍然是 Map>.
      • 好吧,如果这是正确的答案,那么问题就写错了。这绝对不是“作为唯一密钥购买的每件商品”