Groovy 空检查不适用于列表中的 属性
Groovy null check not working on a property in the list
POJO:
class Item{
String prop1
String prop2
}
我的数据:
List<Item> items = new ArrayList(new Item(prop1: 'something'), new Item(prop1: 'something'))
那我试试:
if(items?.prop2){
//I thought prop 2 is present
}
即使项目列表中的两个项目的 prop2 都为 null,上面的代码 returns me true 并进入 if 语句。
谁能告诉我为什么?
.
运算符扩展列表 returns 列表,其大小与您查找的 属性 的值相同(在本例中,列表为 2 个空值)。非空列表的计算结果为真。
问题是items?.prop2
returns[null, null]
。并且由于非空列表的计算结果为真...
您应该能够从以下示例中确定您需要什么:
class Item {
String prop1
String prop2
}
List<Item> items = [new Item(prop1: 'something'), new Item(prop1: 'something')]
assert items?.prop2 == [null, null]
assert [null, null] // A non-empty list evaluates to true
assert !items?.prop2.every() // This may be what you're looking for
assert !items?.prop2.any() // Or Maybe, it's this
if(items?.prop2.every()) {
// Do something if all prop2's are not null
println 'hello'
}
if(items?.prop2.any()) {
// Do something if any of the prop2's are not null
println 'world'
}
POJO:
class Item{
String prop1
String prop2
}
我的数据:
List<Item> items = new ArrayList(new Item(prop1: 'something'), new Item(prop1: 'something'))
那我试试:
if(items?.prop2){
//I thought prop 2 is present
}
即使项目列表中的两个项目的 prop2 都为 null,上面的代码 returns me true 并进入 if 语句。
谁能告诉我为什么?
.
运算符扩展列表 returns 列表,其大小与您查找的 属性 的值相同(在本例中,列表为 2 个空值)。非空列表的计算结果为真。
问题是items?.prop2
returns[null, null]
。并且由于非空列表的计算结果为真...
您应该能够从以下示例中确定您需要什么:
class Item {
String prop1
String prop2
}
List<Item> items = [new Item(prop1: 'something'), new Item(prop1: 'something')]
assert items?.prop2 == [null, null]
assert [null, null] // A non-empty list evaluates to true
assert !items?.prop2.every() // This may be what you're looking for
assert !items?.prop2.any() // Or Maybe, it's this
if(items?.prop2.every()) {
// Do something if all prop2's are not null
println 'hello'
}
if(items?.prop2.any()) {
// Do something if any of the prop2's are not null
println 'world'
}