从Groovy中的列表中删除空项的最佳方法是什么?
ex:[null, 30, null]
想要返回:[30]
答案 0 :(得分:115)
只需使用减号:
[null, 30, null] - null
答案 1 :(得分:71)
如果您不想保留原始列表
,这是一个答案void testRemove() {
def list = [null, 30, null]
list.removeAll([null])
assertEquals 1, list.size()
assertEquals 30, list.get(0)
}
在一个方便的花花公子单元测试中
答案 2 :(得分:48)
findAll方法应该做你需要的。
[null, 30, null].findAll {it != null}
答案 3 :(得分:10)
我认为你会发现这是最短的,假设你不介意其他“假”值也消失了:
println([null, 30, null].findAll())
public Collection findAll()查找与IDENTITY匹配的项目 关闭(即匹配Groovy真相)。例如:
def items = [1,2,0,false,true,'','foo',[],[4,5],null]断言 items.findAll()== [1,2,true,'foo',[4,5]]
答案 4 :(得分:7)
这也可以通过grep:
来实现assert [null, 30, null].grep() == [30]
或
assert [null, 30, null].grep {it} == [30]
或
assert [null, 30, null].grep { it != null } == [30]
答案 5 :(得分:2)
如果[null].findAll{null != it}
为null,则只需it
,然后返回false,以便新集合中不存在。
答案 6 :(得分:2)
这样就可以删除所有空项。
myList.removeAll { !it }
如果您的域中有数字0,则可以检查为空
myList.removeAll { it == null }
答案 7 :(得分:1)
另一种方法是[null, 20, null].findResults{it}
。