如何在初始化时定义地图内容?

2022-09-03 08:36:07

我只是想知道是否可以在初始化时定义Map对象的内容。

例如,可以创建一个数组,如下所示:

new String[] {“apples”, “bananas”, “pears”}

所以,我想知道我们是否可以为地图做类似的事情。


答案 1

你可以,在某种程度上,使用这个语法技巧:

Map<String,String> map = new HashMap<String,String>() {{
    put("x", "y");
    put("a", "b");
}};

不过,不是很愉快。这将创建 一个 匿名子类 ,并将其填充到实例初始值设定项中。HashMap


答案 2

如果你在创建后是不可变的,并且你不介意添加依赖项,Guava提供了一些很好的流利语法Map

Map<K,V> aMap = ImmutableMap.<K,V>builder().put(key0, val0).put(key1,val1).build();

如果你觉得真的很奇特,Scala的语法与你想要的完全一样,并且可以与其他Java代码互操作:

val aMap = Map("a"->0, "b"->1)

请注意,Scala 编译器会根据您放入的内容推断泛型类型 from to ,尽管您也可以显式指定它。MapStringInt

但是,如果这只是一次性的,我会使用基于初始值设定项的语法。番石榴库和 Scala 语言还有很多其他值得推荐的地方,但是学习一个全新的库/语言可能有些过分。