2013-11-22 61 views
2

如果我有類似下面的SetMultimap:從Guava SetMultimap中刪除空值?

SetMultimap<String, MyObject> map = HashMultimap.create(); 
map.put("a", new MyObject()); 
map.put("a", null); 
map.put("b", null); 

是什麼讓我結束了類似的信息(即某些鍵將只有空值從這個集合中刪除空值的最佳方式,但我還是想重點):

a -> obj 
    b -> empty 
+0

如果你可以迭代它,只是刪除空循環狀態。 – MightyPork

+0

你認爲應該代表什麼?空*? –

+1

請注意,在Multimap中,不存在「存在」鍵但不映射到任何值的情況。一個鍵或者映射到一個或多個值,或者它完全不在'Multimap'中。感謝劉易斯 –

回答

3
Multimap<String, String> filteredMap = Multimaps.filterValues(map, Predicates.notNull()); 
2

您可以對值創建一個過濾器查看和清除:

Multimaps.filterValues(map, Predicates.isNull()).clear(); 

這將從原始地圖中刪除null值。

樣品

HashMultimap<String, Object> map = HashMultimap.create(); 

map.put("a", "x"); 
map.put("a", null); 
map.put("b", null); 

System.out.println("before: " + map); 

Multimaps.filterValues(map, Predicates.isNull()).clear(); 

System.out.println("after: " + map); 

打印:

before: {b=[null], a=[null, x]} 
after: {a=[x]}