У меня есть объект со структурой
List<Map<String(k1), Map<String(k2), String(v2)>>>
Мне нужно преобразовать приведенный выше список в
List<Map<String(k2), Map<String(k1), String(v2)>>>
Я застрял на том, как получить вложенную карту, используя такую конструкцию, как
serviceResults.stream().map((k, v) -> ????)
, что позволит мне поменять местами ключи. Возможно ли сделать это способом, не используя циклы с использованием потоков Java 8?
Дополнительная информация
Это код, который использует конструкцию цикла
List<Map<String, Map<String, String>>> serviceResults = new ArrayList<>();
//Populate the above list
Map<String, Map<String, String>> swpMapOuter = new HashMap<>();
Map<String, String> swpMapInner = new HashMap<>();
for (Map<String, Map<String, String>> stringMapMap : serviceResults) {
for (Map.Entry<String, Map<String, String>> s : stringMapMap.entrySet()) {
String key1 = s.getKey();
Map<String, String> value1 = s.getValue();
for (Map.Entry<String, String> s1 : value1.entrySet()) {
String key2 = s1.getKey();
String value2 = s1.getValue();
swpMapInner.put(key1, value2);
swpMapOuter.put(key2, swpMapInner);
}
}
}
System.out.println("swpMapOuter " + swpMapOuter);
Ниже приведен код с forEach вместо циклов for, но он задавался вопросом, может ли он быть реализован с использованием конструкций Stream
Map<String, Map<String, String>> swpMapOuter2 = new HashMap<>();
Map<String, String> swpMapInner2 = new HashMap<>();
serviceResults.forEach((stringMapMap) -> {
stringMapMap.entrySet().forEach((s) -> {
String key1 = s.getKey();
Map<String, String> value1 = s.getValue();
value1.entrySet().forEach((s1) -> {
String key2 = s1.getKey();
String value2 = s1.getValue();
swpMapInner2.put(key1, value2);
swpMapOuter2.put(key2, swpMapInner2);
});
});
});
System.out.println("swpMapOuter2 " + swpMapOuter2);