如何迭代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);
}
请建议更好的解决方案/算法/参考来处理上述场景?
通过阅读您在问题下的评论,我认为您的问题是生成这些组合。您可以在后面的步骤中处理的顺序。
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]