Arrays.asList也适用于地图?

时间:2016-11-06 13:28:03

标签: java list dictionary

我有以下代码:

Map<String, Map<Double, String>> map = new HashMap<>();
Map<Double,String> Amap = new HashMap<>();
map.put(getValuesTypes.FUT(), HERE);

我没有首先创建地图并将其放在&#34; HERE&#34;,而是寻找像List Arrays.asList(...) "Here" ?.asMap({1.0,"A"}, {2.0,"B"})那样的功能。 所以我可以进入{{1}}

5 个答案:

答案 0 :(得分:10)

您可以像这样初始化HashMap

new HashMap<Double, String>() {
    {
        put(1.0, "ValA");
        put(2.0, "ValB");
    }
};

答案 1 :(得分:5)

Guava

Map<Double, String> map = ImmutableMap.of(1.0, "A", 2.0, "B");

答案 2 :(得分:4)

Guava的ImmutableMap.of(..)可以帮助实现这个目标:

ImmutableMap.of(1, "a");
JDK中的

只有Collections.singletonMap(..),但这只为您提供了唯一一对的地图。

discussion中有一个guava project包含Maps.asMap(Object... varArgs),它被停止了。因此,ImmutableMap.of(...)是要走的路。

自JDK 9起编辑

在JDK 9中增加了新的方法,它们做同样的事情: Map.of(K,V)

答案 3 :(得分:1)

没有文字以这种方式初始化地图。但是你可以使用现场生成的匿名类:

map.put(getValuesTypes.FUT(), new HashMap<Double, String>() {{
    put(1.0, "A");
    put(2.0, "B");
}});

虽然不推荐。我建议使用Guava&#39; ImmutableMap

map.put(getValuesTypes.FUT(), ImmutableMap.<Double, String>of(1.0, "A", 2.0, "B"));

如果对数大于5,您应该使用他们的builder

map.put(getValuesTypes.FUT(), 
        ImmutableMap.<Double, String>builder().put(1.0, "A")/* 5+ puts */.build());

答案 4 :(得分:0)

您只能使用匿名类初始化新地图。即。

new HashMap<K, V>() {{ put(key, value); put(key, value); }};