从Guava SetMultimap中删除空值?

时间:2013-11-22 13:00:16

标签: java 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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您可以为值创建过滤视图并清除它:

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]}