Как сделать произведение матрицы строк в 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 ответа:
Хорошо, я нашел способ
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