Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从hashmap列表中消除重复项并计算其支持度_Java_Hashmap - Fatal编程技术网

Java 从hashmap列表中消除重复项并计算其支持度

Java 从hashmap列表中消除重复项并计算其支持度,java,hashmap,Java,Hashmap,我有一个itemMap(Map itemMap=newhashmap()) 包含以下元素 { [File3, File2]=4, [File2, File3]=2, [File1, File2]=6, [File1, File3]=2, [File3, File1]=6, [File2, File1]=6 } 我想获得一个不包含重复项的列表。(在我的例子中,副本是包含另一个列表的相同元素的列表)。示例(F1,F2)和(F2,F1)在我的作品中是相同的 所以

我有一个
itemMap
Map itemMap=newhashmap()
) 包含以下元素

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

    }
HashMap myobjectListB=newhashmap();
for(列表键:itemMap.keySet()){
对于(列表y:itemMap.keySet()){
如果((key.containsAll(y)&&(!key.equals(y))&&&(key.size())==y.size()){
int count=itemMap.get(key)+itemMap.get(y);
myobjectListB.put(键,计数);
}   
}
}
System.out.println(“对象列表”+myobjectListB);
}

我写了一个方法,在这个方法中,你可以得到一个没有重复的新地图。向新映射添加值时,它始终会检查列表是否包含在
键集中
,并检查交换列表是否也包含在
键集中
。所以不会有任何重复

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;

    }
}
import java.util.*;
公共班机{
公共静态void main(字符串[]args){
Map itemMap=newhashmap();
itemMap.put(新的ArrayList(Arrays.asList(“File3”、“File2”)),4);
itemMap.put(新的ArrayList(Arrays.asList(“File2”、“File3”)),2);
itemMap.put(新的ArrayList(Arrays.asList(“File1”、“File2”)),6);
itemMap.put(新的ArrayList(Arrays.asList(“File1”、“File3”)),2);
itemMap.put(新的ArrayList(Arrays.asList(“File3”、“File1”)),6);
itemMap.put(新的ArrayList(Arrays.asList(“File2”、“File1”)),6);
System.out.println(移除的副本(itemMap));
}
静态地图移除副本(地图地图){
Map convertedMap=newhashmap();
for(ArrayList列表:map.keySet()){
如果(!convertedMap.keySet()包含(列表)){
集合交换(列表,0,1);
如果(!convertedMap.keySet()包含(列表)){
convertedMap.put(list,map.get(list));
}
}
}
返回转换地图;
}
}

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

我自己做了尝试,但结果是错误的,我编辑了帖子,我把我的尝试放进去了。不包含重复项的列表通常称为集合。如果顺序重要,您是否尝试过HashSet或LinkedHashSet?