问题
是否可以让aHashMap
返回集合中未找到的所有键的默认值?
#1 热门回答(128 赞)
在Java 8中,使用Map.getOrDefault。如果没有找到匹配的密钥,它将获取密钥和返回值。
#2 热门回答(82 赞)
[更新]
如其他答案和评论者所述,从Java 8开始,你只需致电Map#getOrDefault(...)
。
[原创]
没有Map实现可以完全做到这一点,但通过扩展HashMap实现自己的实现是微不足道的:
public class DefaultHashMap<K,V> extends HashMap<K,V> {
protected V defaultValue;
public DefaultHashMap(V defaultValue) {
this.defaultValue = defaultValue;
}
@Override
public V get(Object k) {
return containsKey(k) ? super.get(k) : defaultValue;
}
}
#3 热门回答(65 赞)
如果你不想重新发明轮子,请使用Commons'DefaultedMap,例如,
Map<String, String> map = new DefaultedMap<>("[NO ENTRY FOUND]");
String surname = map.get("Surname");
// surname == "[NO ENTRY FOUND]"
如果你不首先负责创建 Map ,也可以传入现有 Map 。