2014-10-16 2 views
0

У меня 2 массивов (Т0, Т1, Т2) & (R1, R2, R3) Я хочу все 27 комбинаций из них, например:Java: каждое сочетание двух массивов

R1-T1, R1-T2, R1-T3 
R1-T1, R1-T2, R2-T3 
R1-T1, R1-T2, R3-T3 
R1-T1, R2-T2, R1-T3 
R1-T1, R2-T2, R2-T3 
R1-T1, R2-T2, R3-T3 
.... 

Я знаю, как сделайте это с помощью 3 для циклов, но мне нужно что-то более гибкое, которое может работать с различным количеством размеров массива (например, (T0, .. T8) & (R1, R2)).

Благодаря

ответ

0

Легкий способ будет преобразовывать массивы в наборы, а затем использовать Google гуавы-х http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Sets.html#cartesianProduct(java.util.List)

Чтобы получить декартово произведение. Он имеет удобный метод для Array -> Set: newHashSet (элементы E ...)

Вы должны рассмотреть возможность использования «стандартных» libarys, чтобы не изобретать велосипед.

1

Почему 3 для петель?

for(int i : array1) { 
    for(int j : array2) { 
     combinations.add(new Combination(i, j)); 
    } 
} 

Подобно тому, как пример ...

+0

Что такое Комбинация? Также я думаю, что это создаст только 9 альтернатив, мне нужно все 27 – nicolasmanic

+0

А теперь я получаю. Я думал, вам нужно все сочетание возможных пар. Сожалею.. – Bene

1

В Java 8, вы можете flatmap поток элементов и построить пар из них, как это:

final List<Integer> first = Arrays.asList(1, 2, 3); 
final List<Integer> second = Arrays.asList(1, 2, 3); 

first.stream() 
    .flatMap(x -> second.stream().map(y -> Tuple.tuple(x, y))) 
    .forEach(System.out::println); 
Смежные вопросы