Как использовать двойную инициализацию для Map of Map - PullRequest
4 голосов
/ 12 марта 2019

Я понимаю, что инициализация двойной фигурной скобки имеет свою скрытую стоимость, но есть еще возможный способ инициализации Map<String,Map<String,String>>().

Что я пробовал:

Map<String, Map<String, String>> defaultSourceCode = new HashMap<String, Map<String, String>>(){
            {"a",new HashMap<String, String>(){{"c","d"}}}
        };

Я знаю, что это плохая практика, но что касается эксперимента, я пробую это.

Справочник и мотивация: Arrays.asList также для карт?

Ответы [ 2 ]

9 голосов
/ 12 марта 2019

Вы можете использовать Map.of() из java9, который возвращает неизменную карту:

Map<String, Map<String, String>> map = Map.of("a", Map.of("c", "d"));

Или Map.ofEntries:

Map<String, Map<String, String>> map1 = Map.ofEntries(
        Map.entry("a", Map.of("c", "d"))
);
5 голосов
/ 12 марта 2019

Почти все в порядке, вы просто должны использовать вызовы методов в двойных скобках:

Map<String, Map<String, String>> defaultSourceCode = new HashMap<String, Map<String, String>>(){
    {put("a",new HashMap<String, String>(){{put("c","d");}});}
};

Но этот ответ описывает, почему вы не должны этого делать.

...