Допустим, у меня есть метод со следующей сигнатурой:
Map<String, String> merge (String[][] ... maps)
Требуется (вариативное) число двумерных массивов, представляющих отображения, например:
String[][] m1 = new String[][] {
{"k1", "a"},
{"k2", "b"}
};
String[][] m2 = new String[][] {
{"k1", "a"},
{"k2", "b"},
{"k3", "c"}
};
String[][] m3 = new String[][] {
{"k1", "x"},
{"k2", "b"}
};
Теперь я могу объединить любые две карты слева направо следующим образом:
Map<String, String> m1 = Stream.of(map1).collect(Collectors.toMap(k -> k[0], v -> v[1]));
Map<String, String> m2 = Stream.of(map2).collect(Collectors.toMap(k -> k[0], v -> Optional.ofNullable(v[1]).orElse("null")));
m1.forEach((key, value) -> m2.merge(key, value, (v1, v2) -> v1));
Но как мне слить переменное число таких карт-массивов, чтобы после передачи m1, m2, m3
как определено выше, результат:
String[][] m3 = new String[][] {
{"k1", "x"},
{"k2", "b"}
{"k3", "c"}
};