У меня есть 4 типа целочисленных значений.Я хочу сгенерировать все возможные комбинации, состоящие из 3 элементов из приведенных ниже массивов, таких как
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);
В текущей реализации, вдохновленной этим вопросом , я получаю комбинации из 4 элементов, например
5 1 72 3
7 9 8 14
11 25 22 5 //etc
Как получить комбинации из 3 элементов?
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);