2013-11-22 26 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]}