[英]Eliminate duplicates from hashmap list and count their support
我有一個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<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);
}
如果用HashSet
替換ArrayList
,它將按照您的HashSet
方式工作。 這是因為Map
接口每個鍵只存儲一個值,並且使用equals
方法確定兩個鍵是否相等。 比較時,兩個包含相同對象的ArrayList
會返回false
,但是兩個包含不同對象的HashSet
會返回true
我寫了一種方法,可以在其中獲得沒有重復的新地圖。 當您將值添加到新映射時,它將始終檢查列表是否包含在keyset
集中,還檢查交換列表是否也包含在keyset
集中。 因此不會有任何重復。
import java.util.*;
public class Main {
public static void main(String[] args) {
Map<ArrayList<String>, Integer> itemMap = new HashMap<ArrayList<String>, Integer>();
itemMap.put(new ArrayList<>(Arrays.asList("File3", "File2")), 4);
itemMap.put(new ArrayList<>(Arrays.asList("File2", "File3")), 2);
itemMap.put(new ArrayList<>(Arrays.asList("File1", "File2")), 6);
itemMap.put(new ArrayList<>(Arrays.asList("File1", "File3")), 2);
itemMap.put(new ArrayList<>(Arrays.asList("File3", "File1")), 6);
itemMap.put(new ArrayList<>(Arrays.asList("File2", "File1")), 6);
System.out.println(removeDuplicates(itemMap));
}
static Map<ArrayList<String>, Integer> removeDuplicates(Map<ArrayList<String>, Integer> map) {
Map<ArrayList<String>, Integer> convertedMap = new HashMap<ArrayList<String>, Integer>();
for (ArrayList<String> list : map.keySet()) {
if (!convertedMap.keySet().contains(list)) {
Collections.swap(list, 0, 1);
if (!convertedMap.keySet().contains(list)) {
convertedMap.put(list, map.get(list));
}
}
}
return convertedMap;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.