Размещение нулевых значений в списке? - PullRequest
1 голос
/ 21 мая 2010

Я новичок в Java и Groovy, и у меня возникли проблемы со следующим скриптом Groovy. Я создал эту уменьшенную версию скрипта большего размера для облегчения отладки.

Скрипт выполняет итерацию по списку, пытаясь вычислить промежуточную сумму значений всех объектов в списке. Некоторые или все значения этих объектов могут быть нулевыми.


Сценарий

class Field {
    def name
    def value
}

def fields = [
    new Field(name:'Annuities %', value:75),
    new Field(name:'Other %', value:null),
]    

def totalFunding = fields.inject(0) {int total, Field myField ->
    total + myField?.value as Integer

}

Получает эту ошибку:

Exception thrown: java.lang.NullPointerException

java.lang.NullPointerException
    at Script3$_run_closure1.doCall(Script3:15)
    at Script3.run(Script3:14)

Как правильно разместить нулевые значения?

Спасибо, Бетси

Ответы [ 2 ]

3 голосов
/ 21 мая 2010

Просто измените totalFunding на:

def totalFunding = fields.value.inject(0) {int total, value ->
    total += value ?: 0    
}

value ?: 0 является сокращением для

value != null ? value : 0

Также в исходной функции вы забыли присвоить новое значение переменной total

0 голосов
/ 20 апреля 2015

вы также можете использовать sum с закрытием вместо inject:

def totalFunding = fields.value.sum { it ?: 0 }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...