提问者:小点点

如何迭代Hashmap并与同一Hashmap中的其他键进行组合以比较它们的对象


如何迭代Hashmap并与同一Hashmap中的其他键进行组合以比较它们的对象

Map<String, Batch> map = new LinkedHashMap<String, Batch>();
map.put(A,batch1);
map.put(B,batch2);
map.put(C,batch3);
map.put(D,batch4);

我的要求是迭代上面的hashmap,并与同一hashmap中的其他键进行前向组合,并比较它们的对象,下面提到的组合。AB,AC,AD,ABC,ABD,ACD,ABCD,BC,BD,BCD,CD

我尝试了下面的方法,但我能够得到两个项目集的组合(AB,AC,AD,BC,BD和CD)

创建具有相同值的重复hashmap Map mapDuplite=new LinkedHashMap();

for (String item : map.keySet()){
 for (String item2 : mapDuplicate.keySet()){
 if(item != item2){
        compare batches and do stuff...............
    }
   }    
    mapDuplicate.remove(item);
 }

请建议更好的解决方案/算法/参考来处理上述场景?


共1个答案

匿名用户

通过阅读您在问题下的评论,我认为您的问题是生成这些组合。您可以在后面的步骤中处理的顺序。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Scratch {
    static List<String> list = Arrays.asList("A", "B", "C", "D");

    public static void main(String[] args) {
        List<String> result = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            result.addAll(restList(list.get(i), list.subList(i + 1, list.size())));
        }
        System.out.println(Arrays.toString(result.toArray()));
    }

    static List<String> restList(String input, List<String> inputList) {
        List<String> restList = new ArrayList<>();
        for (int i = 0; i < inputList.size(); i++) {
            String x = input + inputList.get(i);
            restList.add(x);
            restList.addAll(restList(x, inputList.subList(i + 1, inputList.size())));
        }
        return restList;
    }
}

如果您运行上述代码,您将获得一个包含元素的列表:

[AB, ABC, ABCD, ABD, AC, ACD, AD, BC, BCD, BD, CD]