如何使用Map的Map进行双括号初始化

问题描述 投票:4回答:2

我确实理解双括号初始化有其自己的隐藏成本,仍有可能的方法来初始化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 also for maps?

java java-8 java-9
2个回答
5
投票

几乎一切都很好,你只需要在双括号中使用方法调用:

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

this answer描述,为什么你不应该这样做。


9
投票

您可以使用java9中返回不可变映射的Map.of()

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"))
);
© www.soinside.com 2019 - 2024. All rights reserved.