在 Groovy 中检查集合是空还是空

我需要对集合执行 null 或空检查; 我认为 !members?.empty是不正确的。有没有一种更时髦的方式来写下面的内容?

if (members && !members.empty) {
// Some Work
}
284408 次浏览

确实有一个 Groovier Way。

if (members) {
//Some work
}

如果 members是一个集合,则完成所有操作。空检查和空检查(空集合被强制为 false)。向 绝妙的真相致敬。:)

!members.find()

我认为现在解决这个问题的最好方法是上面的代码,它从 Groovy 1.8.1 http://docs.groovy-lang.org/docs/next/html/groovy-jdk/java/util/Collection.html#find()开始就可以工作了:

def lst1 = []
assert !lst1.find()


def lst2 = [null]
assert !lst2.find()


def lst3 = [null,2,null]
assert lst3.find()


def lst4 = [null,null,null]
assert !lst4.find()


def lst5 = [null, 0, 0.0, false, '', [], 42, 43]
assert lst5.find() == 42


def lst6 = null;
assert !lst6.find()

仅供参考,此类代码可以正常工作(您可能会发现它很丑陋,这是您的权利:) :

def list = null
list.each { println it }
soSomething()

换句话说,这段代码的空/空检查 都有是无用的:

if (members && !members.empty) {
members.each { doAnotherThing it }
}


def doAnotherThing(def member) {
// Some work
}