Как сделать произведение матрицы строк в Java?


У меня есть неизвестное число строк []. Каждый массив может быть разного размера.

Я хочу создать "продукт" (или конкатенацию) каждого значения в каждом массиве.

Пример

public static void main(String[] args) {
    String[] x = {"a", "b", "c"};
    String[] y = {"d", "e", "f", "g"};
    String[] z = {"h", "i"};
    ...
}

Желаемый выход

Выход будет adh, adi, aeh, aei, ...

Я думаю, что я должен справиться с этим через рекурсию, учитывая, что я не знаю, сколько массивов у меня есть. Но даже в этом случае я изо всех сил пытаюсь понять, где я буду хранить результаты.

Какие-нибудь указатели?

2 2

2 ответа:

Хорошо, я нашел способ

package eu.webfarmr;

import java.util.ArrayList;
import java.util.List;

public class Dummy {
    public static void main(String[] args) {
        String[] x = {"a", "b", "c"};
        String[] y = {"d", "e", "f", "g"};
        String[] z = {"h", "i"};
        ArrayList<String[]> list = new ArrayList<String[]>();
        list.add(x);
        list.add(y);
        list.add(z);
        List<String> result = product(list);
        for (String r : result){
            System.out.println(r);
        }
    }

    private static ArrayList<String> product(ArrayList<String[]> items){
        ArrayList<String> result = new ArrayList();
        if (items!=null && items.size()>0){
            String[] currentItem = items.get(0);
            ArrayList<String[]> clone = (ArrayList<String[]>) items.clone();
            clone.remove(0);
            for (String item : currentItem){                
                ArrayList<String> product = product(clone);
                if (product!=null && product.size()>0){
                    for (String p : product){
                        result.add(item+p);
                    }
                } else {
                    result.add(item);
                }
            }
        }
        return result;
    }
}

Этот код выведет

adh
adi
aeh
aei
afh
afi
agh
agi
bdh
bdi
beh
bei
bfh
bfi
bgh
bgi
cdh
cdi
ceh
cei
cfh
cfi
cgh
cgi

Я сделал это и работал отлично.

private static List<String> multiply(List<String> x, List<String> y) {
    List<String> results = new ArrayList<>();
    x.forEach(s1 -> y.forEach(s2 ->
                    results.add(s1+s2 )
            )
    );
    return results;
}

public static void main(String[] args) {
    String[] x = {"a", "b", "c"};
    String[] y = {"d", "e", "f", "g"};
    String[] z = {"h", "i"};
    List<List<String>> inputs = Arrays.asList(Arrays.asList(x),Arrays.asList(y),Arrays.asList(z));
    List<String> results = Arrays.asList("");

    for (int i = 0; i < inputs.size(); i++) {
        results = multiply(results, inputs.get(i));
    }
    System.out.println("results = " + results);

}

Вывод:

АдГ Ади ах АЕИ сайт AFH АФИ АГ аги срчк бди Бех беи bfh Бик ВФС БГИ ЦРБ cdi ceh cei cfh cfi cgh cgi