可修改地图静态初始化的最佳方法是什么?我发现只有
ImmutableMap.of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5)
但是这种方式创建了不可变映射并包含固定的参数列表。
如果您确实想要of
代码时尚,您可以使用:
myMap = Maps.newHashMap(ImmutableMap.of(k1, v1, k2, v2...));
此外,ImmutableMap.Builder
从复杂源创建地图的其他选择是:
myMap = Maps.newHashMap(new ImmutableMap.Builder<K, V>()
.put(k1, v1) //One k-v pair
.putAll(otherMap) //From other Map
.put(Maps.immutableEntry(k2, v3)) //From a Map Entry
...
.build());
加:我的代码不是 ImmutableMap 的初衷。如果 Nawa 坚持使用 Guava 库;)
您实际上不需要静态初始化。以下有什么问题?
Map<K, V> map = Maps.newHashMap();
map.put(k1, v1);
map.put(k2, v2);
// More put() calls
// map is now ready to use.
如果需要,您可以围绕它创建一个辅助方法,但您只能创建这么多不同的版本(用于 1 个条目、2 个条目等)。在某些时候,它不再有帮助了。
对于可变集合没有意义。我能想到的唯一原因是,在创建最初的小型可变映射时,您希望对此有一个速记。如果您经常需要这种安静,请编写您自己的实用程序方法:
public static <K,V> HashMap<K,V> newHashMap(K k1, V v1) {
HashMap<K, V> map = new HashMap<>();
map.put(k1, v1);
return map;
}
public static <K,V> HashMap<K,V> newHashMap(K k1, V v1, K k2, V v2) {
HashMap<K, V> map = new HashMap<>();
map.put(k1, v1);
map.put(k2, v2);
return map;
}
...
只要您认为它仍然可读,就覆盖它。由于键和值的混合,我认为这很快就会变得难以理解——即使格式正确。番石榴家伙在 5 个键值对上停止了这个,恕我直言。