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"})进入了。
- {1.0,"A"}是一个对象数组,不是一个映射
- 使用Java 9,您将能够使用集合工厂方法来创建不可变的地图,参见下载。java.NET/Java/JDK9/DOCS/API/Java/UITL/MAP.html HTML of K-ZWNJ;和γ8203;-V及其变体。
您可以这样初始化HashMap。
1 2 3 4 5 6
| new HashMap <Double, String >() {
{
put (1.0, "ValA");
put (2.0, "ValB");
}
}; |
- 请注意,它隐藏了创建额外映射实例的成本。这叫做双括号初始化。
- 用Java 9可以简单地做EDOCX1,0
Guava的不变映射(..)可以帮助实现以下目标:
在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()); |
- 不需要进口额外的libs,您可以使用java.util.Collections这样的Collections.unmodifiableMap(myHashMapInstance)。
只能使用匿名类初始化新映射。即
new HashMap() {{
put(key, value);
put(key, value);
}};