Похоже, вы действительно хотите MultiMap .В частности, ArrayListMultimap позволяет дублировать записи:
ArrayListMultimap<String, String> map = ArrayListMultimap.create();
for each line in file:
parse key k
for each value in line:
parse value v
map.put(k, v);
for (Map.Entry<String,String> entry : map.entries()) {
String key = entry.getKey();
String value = entry.getValue();
}
Если вы хотите получить декартово произведение карт, вы можете вычислить это непосредственно с помощью рекурсии, или вы можете перебирать карты: создать список итераторов и стиль итерации одометра;когда итератор N достигает своего конца, продвиньте итератор N + 1 и сбросьте итераторы 1..N.
Только что осмотрелся и нашел этот SO вопрос: Итеративное декартово произведение в Java
Поэтому я бы порекомендовал вам использовать Sets.cartesianProduct гуавы для декартового произведения.Вот мой код, который вы можете адаптировать к вашей логике ввода:
String key1 = "a";
Set<Integer> values1 = Sets.newLinkedHashSet(Arrays.asList(1, 2, 3, 4 ));
String key2 = "b";
Set<Integer> values2 = Sets.newLinkedHashSet(Arrays.asList(5, 6, 7));
String key3 = "c";
Set<Integer> values3 = Sets.newLinkedHashSet(Arrays.asList(8, 9));
List<String> keys = Arrays.asList(key1, key2, key3);
Set<List<Integer>> product = Sets.cartesianProduct(values1, values2, values3);
for (List<Integer> values : product) {
for (int i = 0; i < keys.size(); ++i) {
String key = keys.get(i);
int value = values.get(i);
System.out.print(key + "=" + value + "; ");
}
System.out.println();
}