Как я могу LowerCase все значения HashMap? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть Map<String,Map<String,String>>, где я бы хотел понизить каждый ключ и значение. С помощью следующего кода я могу это сделать, но структура моих данных меняется. Как я могу это исправить?

for (Map.Entry<String, Map<String, String>> t : list.entrySet()) {
    for (Map.Entry<String, String> e : t.getValue().entrySet()) {
        lowerCaseList1.put(t.getKey().toLowerCase().trim(), lowerCaseList2.put(e.getValue().toLowerCase().trim(), e.getKey().toLowerCase().trim()));
    }
}

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

Чтобы преобразовать все 3 строки в Map<String,Map<String,String>> в верхний регистр 1 , создайте новую карту.

Map<String,Map<String,String>> input = Map.of("abc", Map.of("Def", "Ghi"),
                                              "jkl", Map.of("MNO", "PQR", "stu", "vwx"));

Map<String,Map<String,String>> output = input.entrySet().stream()
        .collect(Collectors.toMap(
                e1 -> e1.getKey().toUpperCase(),
                e1 -> e1.getValue().entrySet().stream().collect(Collectors.toMap(
                        e2 -> e2.getKey().toUpperCase(),
                        e2 -> e2.getValue().toUpperCase()))));

System.out.println(input);
System.out.println(output);

Выходные данные

{abc={Def=Ghi}, jkl={stu=vwx, MNO=PQR}}
{ABC={DEF=GHI}, JKL={STU=VWX, MNO=PQR}}

Примечание: Код не будет выполнен с IllegalStateException: Duplicate key, если есть 2 клавиши, которые станут одинаковыми в верхнем регистре.

Map<String,Map<String,String>> input = Map.of("aaa", Map.of("bbb", "ccc", "Bbb", "Ccc"));

Выходные данные

java.lang.IllegalStateException: Duplicate key BBB (attempted merging values CCC and CCC)

1) Вопрос первоначально задавался заглавными буквами, но с тех пор был изменен для запроса строчных букв. Оставив ответ без изменений, поскольку это не имеет значения, чтобы показать, как заменить корпус.

1 голос
/ 05 марта 2020

В дополнение к элегантному решению @Andreas вы можете сделать это также следующим образом:

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

public class Main {
    public static void main(String[] args) {
        Map<String, Map<String, String>> map = Map.of("Map1", Map.of("tEst1", "VALUE1", "test2", "VAlue2"), "MaP2",
                Map.of("TEST3", "value3", "Test4", "Value4"));
        System.out.println(map);

        Map<String, Map<String, String>> tempOuter = new LinkedHashMap<String, Map<String, String>>();
        Map<String, String> tempInner;

        for (Entry<String, Map<String, String>> outerEntry : map.entrySet()) {
            tempInner = new LinkedHashMap<String, String>();
            for (Entry<String, String> innerEntry : outerEntry.getValue().entrySet()) {
                tempInner.put(innerEntry.getKey().toLowerCase(), innerEntry.getValue().toLowerCase());
            }
            tempOuter.put(outerEntry.getKey().toLowerCase(), tempInner);
        }

        map = new LinkedHashMap<String, Map<String, String>>();
        map.putAll(tempOuter);
        System.out.println(map);
    }
}

Вывод:

{Map1={test2=VAlue2, tEst1=VALUE1}, MaP2={TEST3=value3, Test4=Value4}}
{map1={test2=value2, test1=value1}, map2={test3=value3, test4=value4}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...