Сортировка коллекций Groovy с закрытием и проверкой нуля вызывает исключение - PullRequest
0 голосов
/ 26 октября 2018

У меня есть утверждение, как показано ниже в моем коде:

otherParents.sort { -it.parent.lastUpdateDate.time }.each {
// ...
}

иногда lastUpdateDate будет нулевым, и это приведет к исключению.

Как мне этого избежать, я совершенно новичок в groovy, я попробовал вопросительный знак типа

otherParents.sort { -it.parent?.lastUpdateDate?.time }.each {
// ...
}

но это тоже не работает

1 Ответ

0 голосов
/ 26 октября 2018

Есть два способа решения этой проблемы. Если вы хотите сохранить записи с null date, тогда вы должны передать закрытие, которое представляет компаратор, что-то вроде этого:

otherParents.sort { a,b -> b.parent.lastUpdatedDate?.time <=> a.parent.lastUpdatedDate?.time }.each {
    println it
}

Он будет сортировать записи в порядке убывания, а записи с null последней обновленной датой будут сохранены в конце списка.

В качестве альтернативы, если вы хотите удалить записи с null последней обновленной датой, тогда вы можете отфильтровать список ввода и использовать ту же операцию сортировки, которую вы использовали ранее:

otherParents.findAll { it.parent.lastUpdatedDate != null }.sort { -it.parent.lastUpdatedDate.time }.each {
    println it
}

Единственное отличие состоит в том, что второй пример будет сортировать только список записей, которые имеют ненулевую дату последнего обновления.

И ниже вы можете найти пример с выводом, который он производит:

import java.text.SimpleDateFormat

def date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")

def otherParents = [
        [parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:00")]],
        [parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:01")]],
        [parent: [lastUpdatedDate: null]],
        [parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:02")]],
        [parent: [lastUpdatedDate: date.parse("2018-10-26T10:00:03")]],
        [parent: [lastUpdatedDate: null]],
        [parent: [lastUpdatedDate: null]]
]

otherParents.sort { a,b -> b.parent.lastUpdatedDate?.time <=> a.parent.lastUpdatedDate?.time }.each {
    println it
}

println "----"

otherParents.findAll { it.parent.lastUpdatedDate != null }.sort { -it.parent.lastUpdatedDate.time }.each {
    println it
}

Выход:

[parent:[lastUpdatedDate:Fri Oct 26 10:00:03 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:02 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:01 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:00 CEST 2018]]
[parent:[lastUpdatedDate:null]]
[parent:[lastUpdatedDate:null]]
[parent:[lastUpdatedDate:null]]
----
[parent:[lastUpdatedDate:Fri Oct 26 10:00:03 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:02 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:01 CEST 2018]]
[parent:[lastUpdatedDate:Fri Oct 26 10:00:00 CEST 2018]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...