Обмен ключей вложенных карт в списке с использованием Java 8 - PullRequest
1 голос
/ 25 июня 2019

У меня есть объект со структурой

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);
...