关于数组:在Java中以更简洁的方式实例化映射

Instantiate a map in a more concise manner in Java

本问题已经有最佳答案,请猛点这里访问。

有没有比这更短的方法?

1
2
3
4
5
6
7
8
9
10
11
Map<String, Integer> values = new HashMap<String, Integer>();
values.put("A", 1);
values.put("E", 1);
values.put("D", 2);
values.put("R", 2);
values.put("B", 3);
values.put("M", 3);
values.put("V", 4);
values.put("Y", 4);
values.put("J", 8);
values.put("X", 8);

在爪哇中使用数组,您可以这样做

1
int[] temp = {1,2};

而不是

1
2
3
int[] temp = new int[2]
temp[0] = 1;
temp[1] = 2;

我在找类似上面地图的东西。有可能吗?

一如既往地感谢您的帮助:)


你可以试试这个,但你必须小心:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HashMap<String, Integer> values = new HashMap<String, Integer>()
{
    {
        put("A", 1);
        put("E", 1);
        put("D", 2);
        put("R", 2);
        put("B", 3);
        put("M", 3);
        put("V", 4);
        put("Y", 4);
        put("J", 8);
        put("X", 8);
    }
};

阅读此处有关双括号初始化的更多信息。


没有简单的方式使用Java,但如果你使用番石榴,你可以做到这一点:

1
2
  Map<String, Integer> values =
     ImmutableMap.<String, Integer> builder().put("A", 1).put("E", 1).put("D", 2).build();

参见:

  • 如何初始化静态映射?


不,没有直接的方法。

您需要按照建议初始化映射。

1
2
3
4
5
6
7
8
9
10
11
Map<String, Integer> values = new HashMap<String, Integer>();
values.put("A", 1);
values.put("E", 1);
values.put("D", 2);
values.put("R", 2);
values.put("B", 3);
values.put("M", 3);
values.put("V", 4);
values.put("Y", 4);
values.put("J", 8);
values.put("X", 8);

如果这些值中有任何模式,可以将其简化为使用循环。

另一种选择是使用hashmapbuilder。

这里也可以看到。

如何直接初始化哈希映射(以文字方式)?

另一种选择是使用番石榴。他们有办法解决这个问题。


如果你认为你知道键和值的组合,你可以这样做,但这是一种黑客行为:

1
2
3
4
5
6
7
8
String[] keys = {"A","B","C"};
int[] values = {1, 2, 3};

Map<String, Integer> myMap = new HashMap<String, Integer>();

for(int i = 0; i < keys.length; i++){
  myMap.put(keys[i], values[i]);
}

但您必须非常小心,最重要的是两个数组的长度应该相同。