java:用空键隐藏条目的地图视图?

时间:2011-05-05 17:06:04

标签: java map transform

我有一个Map<String,String>,其中包含一个带有空键的特殊值。改变事情并不容易,所以我没有这个。

有没有办法执行以下任一操作:

  • 查看此地图,该地图也是隐藏空键条目的Map<String,String>
  • 查看隐藏空键条目
  • 的地图keySet()

通过“视图”,我的意思是地图中的更改会在视图中产生更改。

我认为后者更容易,但我不知道该怎么做。

3 个答案:

答案 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; } 
 }),