Groovy нулевая проверка не работает для свойства в списке

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 для обоих элементов в списке элементов, приведенный выше код возвращает мне значение true и помещается внутрь оператора if.

Может кто-нибудь сказать мне, почему?

2 ответа

Решение

Проблема в items?.prop2 возвращается [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'
}

. Оператор, распространяющий список, возвращает список того же размера со значением искомого свойства (в данном случае это список из 2 нулей). Непустые списки оцениваются как истинные.

Другие вопросы по тегам