关于Java:Arrays.asList也为地图?

Arrays.asList also for maps?

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

我有以下代码:

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

我不是先创建一个地图,然后把它放在"这里",而是在寻找一个类似于我可以在List那里使用Arrays.asList(...)的函数。这样我就可以在"Here" ?.asMap({1.0,"A"}, {2.0,"B"})进入了。


您可以这样初始化HashMap

1
2
3
4
5
6
new HashMap<Double, String>() {
    {
        put(1.0,"ValA");
        put(2.0,"ValB");
    }
};


Guava的不变映射(..)可以帮助实现以下目标:

1
ImmutableMap.of(1,"a");

在JDK中只有collections.singletonmap(..),但这只为您提供了一个带有唯一一对的映射。

在瓜娃项目中有一个讨论包含一个Maps.asMap(Object... varArgs),但它被停止了。所以,(…)的不变映射是前进的道路。

从JDK 9开始编辑

在JDK9中,添加了执行相同操作的新方法:(k,v)的映射


番石榴

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

没有文字可以用这种方式初始化映射。但是您可以使用一个匿名类在现场生成:

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

但不建议这样做。我建议使用Guava的ImmutableMap

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

如果多对大于5,则应使用它们的builder

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


只能使用匿名类初始化新映射。即

new HashMap() {{
put(key, value);
put(key, value);
}};