关于java:如何使用Map for Map的双括号初始化

How to use double brace initialization for Map of Map

我确实理解双括号初始化有其自己的隐藏成本,仍有可能的方法来初始化Map>()

我尝试了什么:

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

我知道这是一个不好的做法,但实验我正在尝试。

参考和动机:Arrays.asList也适用于地图?


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

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

或者Map.ofEntries

1
2
3
Map<String, Map<String, String>> map1 = Map.ofEntries(
        Map.entry("a", Map.of("c","d"))
);


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

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

但是这个答案描述了为什么你不应该这样做。