I have 4 types of Integer values. I want to generate all possible combinations consisting of 3 elements from the below arrays like
5 1 72
3 7 9
8 14 11 //etc
List<Integer> list1 = Arrays.asList(5, 7, 11, 2, 10);
List<Integer> list2 = Arrays.asList(1, 9, 25);
List<Integer> list3 = Arrays.asList(72, 8);
List<Integer> list4 = Arrays.asList(3, 14, 22, 37, 19);
With the current implementation, inspired by this question, I'm getting combinations of 4 elements like
5 1 72 3
7 9 8 14
11 25 22 5 //etc
How can I achieve getting combinations of 3 elements?
private static List<List<Integer>> getCombination(int currentIndex, List<TempContainer<Integer>> containers) {
if (currentIndex == containers.size()) {
// Skip the items for the last container
List<List<Integer>> combinations = new ArrayList<>();
combinations.add(new ArrayList<>());
return combinations;
}
List<List<Integer>> combinations = new ArrayList<>();
TempContainer<Integer> container = containers.get(currentIndex);
List<Integer> containerItemList = container.getItems();
List<List<Integer>> suffixList = getCombination(currentIndex + 1, containers);
int size = containerItemList.size();
for (int ii = 0; ii < size; ii++) {
Integer containerItem = containerItemList.get(ii);
if (suffixList != null) {
for (List<Integer> suffix : suffixList) {
List<Integer> nextCombination = new ArrayList<>();
nextCombination.add(containerItem);
nextCombination.addAll(suffix);
combinations.add(nextCombination);
}
}
}
return combinations;
}
TempContainer container1 = new TempContainer();
container1.setItems(list1);
TempContainer container2 = new TempContainer();
container2.setItems(list2);
TempContainer container3 = new TempContainer();
container3.setItems(list3);
TempContainer container4 = new TempContainer();
container4.setItems(list4);
List<TempContainer<Integer>> containers = new ArrayList<>(3);
containers.add(container1);
containers.add(container2);
containers.add(container3);
containers.add(container4);
// Get combinations
List<List<Integer>> combinations = getCombination(0, containers);