如何只将非空项添加到Groovy中的列表

时间:2013-04-02 09:32:51

标签: groovy

我想将非空项添加到List。所以我这样做:

List<Foo> foos = []
Foo foo = makeFoo()
if (foo)
    foos << foo

但有没有办法在单个操作中完成(在创建列表后不使用findAll)。像:

foos.addNonNull(makeFoo())

3 个答案:

答案 0 :(得分:10)

另一种选择是使用短路表达式:

foo && foos << foo

对于要评估的第二部分,foo变量必须求值为true。这是其他一些语言的常见做法,但由于可读性问题和惯例,我不愿意在groovy中广泛使用它。

答案 1 :(得分:5)

不,您需要使用if,或编写自己的addNonNull方法(仅使用if

此外:

if( foo ) {

可能还不够,因为这会跳过空字符串,如果它返回整数,则为0

你需要

if( foo != null ) {

答案 2 :(得分:3)

答案是肯定的!我们可以摆脱分配变量

Foo foo = makeFoo()//we can ditch this

答案是否定的,我们无法摆脱这种状况。但我们可以使它更紧凑。

这里&#39>

List<Foo> foos = []
foos += (makeFoo()?:[]);

诀窍是时髦的&#34; +&#34;运算符根据左边的内容以及&#34; +&#34;的右边的内容进行不同的操作。碰巧的是,如果左边的是列表,右边的是一个空列表,则左边的列表中没有任何内容。

优点可以快速输入和压缩。

缺点现在并不是很明显大多数人会发生什么 我们用额外的操作替换了变量赋值。 Groovy是 试图做一些事情来列出foos无论如何,只是碰巧在第二种情况下,该操作的结果给我们一个期望的结果。