是否有更简化的方法来执行以下操作?
Map<String, String> map = new HashMap<String, String>();
map.put("a", "apple");
map.put("b", "bear");
map.put("c", "cat");
我正在寻找更接近这一点的东西。
Map<String, String> map = MapBuilder.build("a", "apple", "b", "bear", "c", "cat");
答案 0 :(得分:15)
始终有double-brace initialization:
Map<String, String> map = new HashMap<String, String>(){{
put("a", "apple"); put("b", "bear"); put("c", "cat");}};
这种方法存在问题。它返回一个扩展HashMap的匿名内部类,而不是HashMap。如果您需要序列化地图,请知道serialization of inner classes is discouraged。
答案 1 :(得分:13)
不,没有,但我写了一个方法来完成这个,受Objective-C NSDictionary类的启发:
public static Map<String, Object> mapWithKeysAndObjects(Object... objects) {
if (objects.length % 2 != 0) {
throw new IllegalArgumentException(
"The array has to be of an even size - size is "
+ objects.length);
}
Map<String, Object> values = new HashMap<String, Object>();
for (int x = 0; x < objects.length; x+=2) {
values.put((String) objects[x], objects[x + 1]);
}
return values;
}
答案 2 :(得分:8)
您可以使用Google馆藏库中的ImmutableMap.Builder。
答案 3 :(得分:3)
您始终可以使用双括号初始化:
Map<String, String> map = new HashMap<String, String>() {{
put("foo", "bar");
put("baz", "qux");
}}
但请记住,根据these answers,这可能效率不高。
答案 4 :(得分:1)
Java 9 添加了Map.of
,例如:
Map<String, String> map = Map.of("a", "apple", "b", "bear", "c", "cat");
最多支持10个条目。对于更多条目,您可以使用重载条目:
Map<String, String> map
= Map.ofEntries
(Map.entry("a", "apple")
, Map.entry("b", "bear")
, Map.entry("c", "cat"));
请注意,这些方法不会返回HashMap。它会返回优化的不可变地图。