java - 从 hashmap 列表中消除重复项并计算它们的支持度

标签 java hashmap

我有一个列表 itemMap ( Map<ArrayList<String>, Integer> itemMap = new HashMap<ArrayList<String>, Integer>() ) 包含以下元素

 { [File3, File2]=4, 
   [File2, File3]=2, 
   [File1, File2]=6,
   [File1, File3]=2, 
   [File3, File1]=6,
   [File2, File1]=6 }

我想获得一个不包含重复项的列表。 (在我的例子中,重复项是包含另一个列表的相同元素的列表)。示例 (F1,F2) 和 (F2,F1) 在我的工作中是相同的。

所以我想获得以下结果:

{ [File3, File2]=6, 
  [File1, File3]=8, 
  [File1, File2]=12 }

如您所见,我对重复项的计数进行了求和,但我在 HashMap 中保留了其中一个重复项。 谁能帮我写一个简单的代码,谢谢。 我自己的尝试失败了:

HashMap<List<String>,Integer>   myobjectListB  = new HashMap<List<String>,Integer>();
        for (List <String> key : itemMap.keySet()){
            for (List <String> y : itemMap.keySet()){
            if((key.containsAll(y) && (!key.equals(y))) && (key.size())==y.size()) {
                int count = itemMap.get(key)+itemMap.get(y);
                myobjectListB.put(key, count);


            }   

            }

        }
        System.out.println("object list"+ myobjectListB);

    }

最佳答案

如果您将 ArrayList 替换为 HashSet,它将按您预期的方式工作。这是因为 Map 接口(interface)只为每个键存储一个值,并且它使用 equals 方法确定两个键是否相等。两个包含相同对象但顺序不同的 ArrayList 在比较时将返回 false,但两个包含相同对象但顺序不同的 HashSet 将返回

关于java - 从 hashmap 列表中消除重复项并计算它们的支持度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53895142/

相关文章:

floating-point - 如何找到 3D 矢量的哈希值?

java - TableColumn #setCellValueFactory 对于具有 HashMap 的类

java - Intellij IDEA。隐藏 .iml 文件

Java-过滤非法字符

java - 找不到NullPointerException的原因,日志没有按要求输出

java - 像 Python 字典一样循环 Java HashMap?

java - JSF 错误消息和程序卡住。 JSON 解析错误和 primefaces

java - 将 EditText 添加到 HashMap android

android - ListView 仅显示 ArrayList(HashMap) 的最后一个元素

java - HashMap<String, ArrayList>,根据 Key 为 ArrayList 添加新值