【发布时间】:2013-06-19 20:39:28
【问题描述】:
我需要对集合执行 null 或空检查;我认为!members?.empty 是不正确的。有没有更时髦的方法来编写以下内容?
if (members && !members.empty) {
// Some Work
}
【问题讨论】:
我需要对集合执行 null 或空检查;我认为!members?.empty 是不正确的。有没有更时髦的方法来编写以下内容?
if (members && !members.empty) {
// Some Work
}
【问题讨论】:
确实有 Groovier Way。
if (members) {
//Some work
}
如果members 是一个集合,则执行所有操作。空检查和空检查(空集合被强制为false)。冰雹Groovy Truth。 :)
【讨论】:
members?.age.max() 在成员为 null 时会出现“无法在 null 对象上调用方法 max()”。你需要members?.age?.max()
List members = null; 和 List members = [ [age: 12], [age: 24], [age: null], null ]
仅供参考,这种代码可以工作(你会觉得它很丑,这是你的权利:)):
def list = null
list.each { println it }
soSomething()
换句话说,这段代码有空/空检查both没用:
if (members && !members.empty) {
members.each { doAnotherThing it }
}
def doAnotherThing(def member) {
// Some work
}
【讨论】:
!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()
【讨论】: