我有一个数据,
def data = [[name : '', users : []]]
我尝试以各种方式检查数据是否为空,但它不再起作用。 例如,
if(data.name == null){
println 'empty'
}else{
println 'not empty'
}
或者
if(data.name == ''){
println 'empty'
}else{
println 'not empty'
}
它始终打印并非空白'。 我怎样才能检查是否为空?
答案 0 :(得分:1)
data
是一个列表,data.name
暗示data*.name
(Spread Operator)。因此,清楚地检查null
或''
不会对列表产生影响。
所以你的支票应该是data.name==[null]
或类似的东西。 e.g。
groovy:000> data = [[name : '', users : []]]
===> [[name:, users:[]]]
groovy:000> data.name
===> []
groovy:000> data.name==['']
===> true
要利用Groovy Truth(其中空字符串和null都是" falsey")您可以检查,如果所有名称都设置为:
if (data.name.every()) print "got all names"
如果您只是在那里获得列表但不需要它,则适用与Groovy Truth相同的规则,并且以下检查就足够了:
if (data.first().name) print "got name"
答案 1 :(得分:0)
如果您选中data.name.class
,它会为您提供课程java.util.ArrayList
这意味着您应该使用name
访问data[0].name
密钥。
所以,如果你这样做:
if(data[0].name == ''){
println 'empty'
}else{
println 'not empty'
}
它会打印empty
答案 2 :(得分:0)
因为他们都说data.name是列表。所以没有意义,不可能将列表与空字符串或null进行比较。因为data.name
的可能值是空列表或字符串列表。
所以基本上要实现你需要的东西,你可能需要迭代从data.name
返回的每个项目,如下所示:
def data = [[name : '', users : []]]
data*.name.every(){
if(it == '' || it == null)
println "Name is empty."
else
println "Name is not empty."
}