我有一个列表 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/