从Groovy的列表中删除空项目

从Groovy的列表中删除空项目的最佳方法是什么?

例如: [null, 30, null]

想要返回: [30]

这里是一个答案,如果你不想保留原来的名单

 void testRemove() { def list = [null, 30, null] list.removeAll([null]) assertEquals 1, list.size() assertEquals 30, list.get(0) } 

在一个方便的华丽的unit testing

只需使用减号:

 [null, 30, null] - null 

findAll方法应该做你需要的。

 ​[null, 30, null]​.findAll {it != null}​ 

我想你会发现这是最短的,假设你不介意其他“错误”的价值也消失:

 println([null, 30, null].findAll()) 

公共集合findAll()查找与IDENTITY Closure(即匹配Groovy事实)匹配的项目。 例:

def items = [1,2,0,false,true,'','foo',[],[4,5],null] assert items.findAll()== [1,2,true,'foo' ,[4,5]]

这也可以通过grep来实现:

 assert [null, 30, null].grep()​ == [30]​ 

要么

 assert [null, 30, null].grep {it}​ == [30]​ 

要么

 assert [null, 30, null].grep { it != null } == [30]​ 

只要[null].findAll{null != it}如果it是null,那么它返回false,所以它不会存在于新的集合中。

另一种方法是[null, 20, null].findResults{it}

这确实去除了所有的空项目。

 myList.removeAll { !it } 

如果数字0在您的域中,您可以检查null

 myList.removeAll { it == null }