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