如何在Groovy中仅向列表添加非空项

如何在Groovy中仅向列表添加非空项,groovy,Groovy,我想将非空项添加到列表中。所以我这样做: List<Foo> foos = [] Foo foo = makeFoo() if (foo) foos << foo 不,您需要使用if,或者编写自己的addNonNull方法(只使用if) 此外: 可能还不够,因为这将跳过空字符串,或者如果返回整数,则跳过0 你需要 if( foo != null ) { 另一种选择是使用短路表达式: foo && foos << foo foo&&

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

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

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

此外:

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

你需要

if( foo != null ) {

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

foo && foos << foo

foo&&foos答案是肯定的!我们可以不用赋值变量

Foo foo = makeFoo()//we can ditch this
答案是不,我们无法摆脱这种状况。但我们可以使它更紧凑

这是怎么做的

List<Foo> foos = []
foos += (makeFoo()?:[]);
List foos=[]
foos+=(makeFoo()?:[]);
诀窍是groovy的“+”操作符,它根据“+”的左边和右边的不同而工作。碰巧的是,如果左边的是一个列表,右边的是一个空列表,那么左边的列表中不会添加任何内容

优点是打字速度快、紧凑

缺点大多数人身上发生的事情不是一目了然的 我们用一个额外的操作替换了变量赋值。Groovy是
我们将尝试做一些事情来列出foo,不管发生什么,在第二种情况下,该操作的结果会给我们一个期望的结果

同样,由于groovy truthGood point,这可能会跳过您想要添加的空/零值<代码>foo!=null&&foos关于可读性的观点,
foo&&foos应该是。。。。看起来很傻,你需要存储foo来进行检查。
Foo foo = makeFoo()//we can ditch this
List<Foo> foos = []
foos += (makeFoo()?:[]);