Literal declaration of HashMap in Java
在JavaScript中,可以一次声明JSON对象的所有键和值组合,如下所示…
1 2 3 4 5 6 7 8
| var myJSON = {
'key1' : 'value 1',
'key2' : 'value 2',
'key3' : 'value 3',
'key4' : 'value 4',
'key5' : 'value 5',
'key6' : 'value 6'
}; |
我想知道我们是否可以在Java中为HashMaps做类似的事情。
1 2 3 4 5
| HashMap <String, String > map = new HashMap <String, String >(
"Key 1", "Value 1",
"Key 2", "Value 2",
"Key 3", "Value 3"
); |
号
基本上,我需要将它作为一个一次性只读的东西,作为代码其他部分的配置。我搜索并尝试了一些解决方案,但无法使它们发挥作用。还是有更好的方法可以做到?
- @Marounmaroun不是复制品。静态图不等于Literal Declaration
- @S?什么?S?什么?什么?Thumbs up.Reopened.
- @Marounmaroun answered:
- @Marounmaroun disagree with this as well:-/
- @S?什么?S?什么?什么?为什么?……
- @Suresh:它看起来像一个很好的复制品。自从你的回答是一样的答案:stackoverflow.com/A/6802512/217324
- @Nathanhughes Yes.现在议定
- @Marounmaroun自从输出方法仍在使用中
虽然{{(双大括号)是反模式的,但您可以这样编写
1 2 3 4 5
| HashMap <String, String > map = new HashMap <String, String >(){{
put ("Key 1", "Value 1");
put ("Key 2", "Value 2");
put ("Key 3", "Value 3");
}}; |
号
编辑:
如果您正在寻找一种更好的方法来放置元素,请遍历JSON并将键值放入循环中。
- 就是这样;)
- @乔迪卡斯蒂拉与否!映射将包含对封闭类的引用,这可能是不需要的…
- 只是在EDOCX1[0]中缺少一个报价…;)
- @我的看法是…但这就是OP的要求,我更喜欢你的例子,是的,但是OP要求的是一种类似于JSON的静态方式…这就是…
- 我问最后是否有更好的解决方案。我想这是一个解决办法,但最好是用assylias的回答,是吗?基本上,这只是一个一次性的只读变量。我不会操纵它。所以最好是最有效的方法。
- @你可以自由选择答案:)
- 我是想确认这一点——这个回答是我问题的解决方案,但是从编程的角度来看,使用assylias的回复编码可能更好。换句话说,选择这个作为答案,但使用另一个进行编码。
- @沙希德塔伊卡,如果你要以东十一〔1〕号,我的回答就不一样了,我的回答完全集中在以东十一〔2〕号上。
- 你也能加上一点吗,我会选择这个回复。
- @沙希德塔伊卡将加入一个循环。正在更新
在爪哇没有地图文字的概念,但是你可以很容易地写出一个实用的方法来达到类似的效果。例如,请参见此实现。然后可以初始化映射(使用静态导入):
1
| Map <String, String > map = map ("k1", "v1", "k2", "v2"); |
另一种方法是使用"双括号初始化"语法,但它创建了一个匿名内部类,这不一定是个好主意。