вот мое рекурсивное решение с правильным упорядочением, основанное на решении Расмуса. это работает, только если все списки имеют одинаковый размер.
import java.util.Arrays;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<String> first = Arrays.asList(new String[]{"1", "2", "3"});
List<String> second = Arrays.asList(new String[]{"a", "b", "c"});
List<String> third = Arrays.asList(new String[]{"x", "y", "z"});
allCombinations (first, second, third);
}
private static void allCombinations(List<String>... lists) {
allCombinations(lists, 1, "");
}
private static void allCombinations(List<String>[] lists, int index, String pre) {
int nextHop = hop(index, lists.length-1);
for (String s : lists[index]) {
if (index != 0) {
allCombinations(lists, nextHop, pre + s + "-");
} else System.out.println(pre + s);
}
}
private static int hop(int prevIndex, int maxResult){
if (prevIndex%2 == 0){
return prevIndex-2;
} else {
if (prevIndex == maxResult)
return prevIndex-1;
int nextHop = prevIndex+2;
if (nextHop > maxResult){
return maxResult;
} else return nextHop;
}
}
}
решение "правильного упорядочения", которое позволяет спискам разных размеров начинать с последнего списка и работать обратно к первому списку (lists [0]), добавляя элемент в начале или конце " предварительно "строка и передача его вперед. снова первый список напечатает результат. Я бы закодировал это, но ланч готов, и подруге начинает не нравиться stackoverflow ...