从Groovy中的列表中删除空项

时间:2010-07-19 21:27:33

标签: groovy

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

ex:[null, 30, null]

想要返回:[30]

8 个答案:

答案 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}