可能重复:
builder for HashMap
是否有任何实用程序类允许以方便可读的方式从多个键值对创建Map?
我认为guava
应该包含一些东西,但我找不到任何具有必要功能的东西。
我想要的是这样的:
MapBuilder.newHashMap()
.with("key1", 10)
.with("key2", 20)
.with("key3", 30)
.build();
P.S。我也知道双支撑法(new HashMap<>() {{ put(..); put(..); }}
),但我发现它不易读或不方便。
答案 0 :(得分:6)
有什么问题
Map<String, Integer> map = new HashMap<>();
map.put("key1", 10);
map.put("key2", 20);
map.put("key3", 30);
这看起来对我来说非常易读,而且我看不到你从MapBuilder中获得了什么。无论如何,这样的MapBuilder并不难实现。
答案 1 :(得分:5)
为什么不自己滚动?
public class MapBuilder<K,V> {
private Map<K,V> map;
public static <K,V> MapBuilder<K,V> newHashMap(){
return new MapBuilder<K,V>(new HashMap<K,V>());
}
public MapBuilder(Map<K,V> map) {
this.map = map;
}
public MapBuilder<K,V> with(K key, V value){
map.put(key, value);
return this;
}
public Map<K,V> build(){
return map;
}
}
答案 2 :(得分:2)
如何使用返回AbstractMap
的put方法创建自己的this
?
public class MyMap<K, V> extends AbstractMap<K, V>{
@Override
public Set<java.util.Map.Entry<K, V>> entrySet() {
// return set
return null;
}
public MyMap<K, V> puts(K key, V value) {
this.put(key, value);
return this;
};
}
然后使用该方法链对:
new MyMap<String, String>()
.puts("foo", "bar")
.puts("Hello", "World");
答案 3 :(得分:0)
从头开始,未经测试:
import java.util.HashMap;
public class MapBuilder<K, E> {
private HashMap<K, E> m_hashMap;
public static HashMap newHashMap(Class<K> keyClass, Class<E> elementClass) {
return new MapBuilder<K, E>();
}
public MapBuilder() {
m_hashMap = new HashMap<K, E>();
}
public MapBuilder with(K key, E element) {
m_hashMap.put(key, element);
return this;
}
public HashMap<K, E> build() {
return m_hashMap;
}
}
用法:
HashMap<String, Integer> myMap = MapBuilder.newHashMap(String.class, Integer.class)
.with("key1", 10)
.with("key2", 20)
.with("key3", 30)
.build();