Java 枚举集合的无序对(2个组合)

Java 枚举集合的无序对(2个组合),java,arraylist,hashmap,combinations,combinatorics,Java,Arraylist,Hashmap,Combinations,Combinatorics,我想遍历表示一组人的ArrayList,并将每个人的内容与其他人进行比较。内容中充满了这种形式的Hasmaps。我需要比较匹配键的值(键是唯一的)并得到整数的差。这将遍历所有Hashmaps,并遍历Arraylist中的所有人员。但我不应该把体育课的A组和C组比较,然后再把C组和A组比较 我如何编写代码? 我挣扎了三个小时 public Integer comparison(){ ArrayList<HashMap> personList = new ArrayList<

我想遍历表示一组人的ArrayList,并将每个人的内容与其他人进行比较。内容中充满了这种形式的Hasmaps。我需要比较匹配键的值(键是唯一的)并得到整数的差。这将遍历所有Hashmaps,并遍历Arraylist中的所有人员。但我不应该把体育课的A组和C组比较,然后再把C组和A组比较

我如何编写代码? 我挣扎了三个小时

public Integer comparison(){
   ArrayList<HashMap> personList = new ArrayList<>();

   for(int i = 0; i < personList.size(); i++){
      HashMap<String, Integer> persons = new HashMap<>();

      for(int j = i+1; j<persons.size(); j++){
         // sum up the differences
      }
      difference+=difference;
   }
   return difference;
}
公共整数比较(){
ArrayList personList=新的ArrayList();
对于(int i=0;i对于(int j=i+1;j,数学中的这个主题使用了所谓的方法,其中需要找到一个集合的所有k-组合的集合(人a、B和C)。在这种情况下,获取所有组合很简单,因为您知道,始终只需要选择两个元素,即k=2。有关实现这一点的简单方法,请参见下面的外循环和内循环:

    for(int a=0; a < personList.size()-1 /* stop before last */; a++) {
        for(int b=a+1 /* start after first */; b < personList.size(); b++) {
            int sumDiff = 0;
            System.out.print("person"+(char)('A'+a)+" compared with person"+(char)('A'+b)+" = ");
            Set<String> keys = personList.get(a).keySet();
            keys.retainAll(personList.get(b).keySet()); // keys in both only
            for(String key : keys) {
                sumDiff += Math.abs(personList.get(a).get(key)-personList.get(b).get(key));                 
            }
            System.out.println(sumDiff);
        }
    }
for(int a=0;a
输出:

与personB相比,personA=11

personA与personC的比较=8

与personC相比,personB=9


首先,您想做什么还不清楚。我假设您已经获得personList,并将其传递给正在编写的函数。如果您想将结果作为单个注释的列表,则需要将它们添加到列表中,并返回列表而不是整数

下面的示例代码应该返回一个包含值{11,8,9}的列表。如果希望得到这些值的总和,如11+8+9,则不要将每个差异添加到列表中,而是将其添加到初始化为0并在第一个for循环外声明的变量中

公共列表比较(ArrayList personList){
列表结果=新建ArrayList();
//int res=0;
对于(int i=0;i}
我不明白你想做什么。但是为什么你要使用“new HashMap()”你不想要列表条目吗?你需要对数组进行排序,并将每个条目与当前条目后的其余条目进行比较。你能给出一个输入和预期输出的示例吗?@PatrickParker:我喜欢personList中的一个人物角色,带有哈希映射(“test1”,1)(“test2”,4)(“test3”,6),(“test4”,3),带有(“test1”,3),(“test2”,2)(“test3”,1),(“test4”,5)的人,以及带有(“test1”,4),(“test2”,1)(“test3”,5),(“test4”,2)的人,输出应该是这样的:personA与personB=2+2+5+2=11 personA与personC=3+3+1+1=8 personB与personC=1+1+4+3=9相比,我取了值,从中取出差值,并将其相加。好的……那么,该示例的输出应该是什么?