我想将非空项目添加到列表中。所以我这样做:
List<Foo> foos = []
Foo foo = makeFoo()
if (foo)
foos << foo
但是有没有办法在单个操作中完成它(在创建列表后不使用 findAll )。像:
foos.addNonNull(makeFoo())
我想将非空项目添加到列表中。所以我这样做:
List<Foo> foos = []
Foo foo = makeFoo()
if (foo)
foos << foo
但是有没有办法在单个操作中完成它(在创建列表后不使用 findAll )。像:
foos.addNonNull(makeFoo())
另一种选择是使用短路表达式:
foo && foos << foo
对于要评估的第二部分,该foo
变量必须评估为真。这在其他一些语言中是一种常见做法,但由于可读性问题和约定,我不愿在 groovy 中广泛使用它。
不,您需要使用if
,或编写自己的addNonNull
方法(仅使用if
)
还:
if( foo ) {
可能还不够,因为这将跳过空字符串,或者0
如果它返回整数
你需要
if( foo != null ) {
答案是肯定的!我们可以摆脱分配变量
Foo foo = makeFoo()//we can ditch this
答案是否定的,我们无法摆脱这种状况。但是我们可以让它更紧凑。
就是这样
List<Foo> foos = []
foos += (makeFoo()?:[]);
诀窍是 groovy 的“+”运算符,它根据“+”的左侧和右侧的内容而有所不同。碰巧的是,如果左侧是列表而右侧是空列表,则左侧列表中不会添加任何内容。
优点是打字速度快,结构紧凑。
缺点是大多数人发生的事情并不是很明显,我们用额外的操作替换了变量赋值。无论如何,Groovy 都会尝试对 List foos 做一些事情,碰巧在第二种情况下,该操作的结果给了我们想要的结果。