我有一个Map<String,String>
,其中包含一个带有空键的特殊值。改变事情并不容易,所以我没有这个。
有没有办法执行以下任一操作:
Map<String,String>
keySet()
通过“视图”,我的意思是地图中的更改会在视图中产生更改。
我认为后者更容易,但我不知道该怎么做。
答案 0 :(得分:0)
简单的方法是扩展地图并覆盖正确的方法以检查空键值。这些将是:
containsKey(Object key)
entrySet()
get(Object key)
keySet()
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
您还可以实现自己的对象扩展Map并在构造函数中传递Map-with-null,并在调用上述方法之一时执行检查/控制。
如果您对外部图书馆开放,可以查看PredicatedMap。
答案 1 :(得分:0)
如果使用null键的值是特殊情况并且在访问条目时不打算使用它,为什么它在地图中?您是否有理由决定将其放在地图中而不是使用不同的字符串变量?
听起来使用不同的方法更容易,而不是尝试扩展地图以便为这一个案例提供一些特殊属性。这也可以更明确地表明这个字符串值是一个特殊的值,而不是可能让未来的开发人员绊倒,他们必须在你之后查看这些代码。
答案 2 :(得分:0)
我使用了番石榴的Maps.filterKeys()
;工作得很好。
Maps.filterKeys(mymap, new Predicate<String>() {
@Override public boolean apply(String key) { return key != null; }
}),