Java: декартово произведение списка списков
У меня есть проблема, которая на самом деле является общим вопросом программирования, но моя реализация на Java, поэтому я приведу свои примеры таким образом
У меня есть такой класс:
public class Foo {
LinkedHashMap<String, Vector<String>> dataStructure;
public Foo(LinkedHashMap<String, Vector<String>> dataStructure){
this.dataStructure = dataStructure;
}
public String[][] allUniqueCombinations(){
//this is what I need to do
}
}
Мне нужно создать вложенный массив из моегоLinkedHashMap
это представляет каждую уникальную комбинацию всех значений в LHM. например, если мой LHM выглядит следующим образом (псевдокод, но я думаю, что вы можете понять идею ..):
{"foo" => ["1","2","3"], "bar" => ["3","2"], "baz" => ["5","6","7"]};
тогда моя строка [] [] должна выглядеть так:
{
{"foo","bar","baz"},
{"1","3","5"},
{"1","2","5"},
{"1","3","6"},
{"1","2","6"},
{"1","3","7"},
{"1","2","7"},
{"2","3","5"},
{"2","2","5"},
{"2","3","6"},
{"2","2","6"},
{"2","3","7"},
{"2","2","7"},
{"3","3","5"},
{"3","2","5"},
{"3","3","6"},
{"3","2","6"},
{"3","3","7"},
{"3","2","7"},
}
Я думаю, что это все из них, я сделал это вручную (очевидно), поэтому я мог пропустить набор, но я думаю, что это иллюстрирует то, что я пытаюсь сделать. Не имеет значения, в каком порядке поступает каждый набор, если присутствуют все уникальные комбинации. Также, чтобы быть ясным, вы не знаете, сколько элементов в LHM, ни сколько элементов в каждом последующем векторе. Я нашел ответы, которые соответствуют случаю, когда вы хотите, чтобы каждая уникальная комбинация всех элементов в одном массиве, но ничего, что соответствует этому точно. Однако, если это точная копия вопроса, укажите в ответе ссылку, и я закрою вопрос.
Обновить - Я изменил свои типы на строки, потому что мой реальный пример - это строки. Я пытался использовать целые числа, чтобы сделать пример более читабельным, но ответы, которые я получил до сих пор, плохо переводятся в строки. Так что, да, это числа, но в моем случае это будут строки, которые не будут иметь большого смысла ни для кого, кроме людей, которые используют это конкретное приложение. так что это всего лишь абстракция.