2011-05-05 24 views
0

我有一個Map<String,String>它包含一個特殊的值與一個空鍵。改變事情並不那麼容易,所以我沒有這個。java:映射視圖,用null鍵隱藏條目?

有沒有辦法做到以下任一操作:

  • 使這個地圖,這也是一個Map<String,String>其隱藏空鍵輸入
  • 做出的視點的視點地圖的keySet()這隱藏空密鑰條目

「查看」我的意思是說,地圖上的變化會在視圖中產生變化。

我認爲後者更容易,但我不知道該怎麼做。

+0

請保留「java」的標題。我無法告訴你有多少次我在「相關」下搜索過問題或看到過問題,這聽起來很有希望,但問題指的是與我需要了解的不同語言 – 2011-05-05 17:17:29

回答

0

我用番石榴的Maps.filterKeys();這工作得很好。

Maps.filterKeys(mymap, new Predicate<String>() { 
    @Override public boolean apply(String key) { return key != null; } 
}), 
0

簡單的方法是擴展您的映射並覆蓋正確的方法來檢查空鍵值。這些將是:

containsKey(Object key) 
entrySet() 
get(Object key) 
keySet() 
put(K key, V value) 
putAll(Map<? extends K,? extends V> m) 

你也可以實現自己的目標擴展地圖,並通過您的地圖,與空在構造和執行檢查/控制時的上述方法之一被調用。

如果您對外部圖書館開放,您可以查看PredicatedMap

0

如果使用null鍵的值是特殊情況,並且在您訪問條目時不打算使用它,爲什麼它在地圖中?是否有一個原因,你決定把它放在地圖上,而不是有不同的字符串變量?

聽起來好像使用不同的方法會比較容易,而不是試圖擴展地圖來爲這種情況提供一些特殊的屬性。這也將更明確地表明,這個字符串值是一個特殊的值,而不是那些可能會讓未來的開發人員在你之後看到這個代碼。