Подтвердить что ты не робот

Сортировать список по дате в порядке убывания - groovy безумие

Я не могу сортировать список объектов по дате в порядке

скажет, что это моя классная вещь

class Thing {

Profil profil
String status = 'ready'
Date dtCreated = new Date()
}

внутри метода, создающего List things

            List profiles = profil.xyz?.collect { Profil.collection.findOne(_id:it) }

            List things = []

а затем я заполняю список каждой связанной вещью каждого профиля

            profiles.each() { profile,i ->
                if(profile) {
                    things += Thing.findAllByProfilAndStatus(profile, "ready", [sort: 'dtCreated', order: 'desc']) as 
                 }

В порядке, теперь things имеет много вещей в нем, к сожалению, [order: 'desc'] был применен к каждому набору вещей, и мне нужно отсортировать весь список с помощью dtCreated, который отлично работает как

            things.sort{it.dtCreated}

Хорошо, теперь все вещи сортируются по дате, но в неправильном порядке, последнее - последнее в списке

поэтому мне нужно сортировать в противоположном направлении, я ничего не нашел в Интернете, чтобы поддразнивать меня вперед, попробовал что-то вроде

            things.sort{-it.dtCreated} //doesnt work
            things.sort{it.dtCreated}.reverse() //has no effect

и я не найду никакого подхода groovy для такой стандартной операции, может быть, у кого-то есть подсказка, как я могу сортировать свои вещи по дате в порядке descedant? должно быть что-то вроде orm, которое я использовал выше [sort: 'dtCreated', order: 'desc'] или это не так?

за любой приветствие заранее

4b9b3361

Ответ 1

Вместо

things.sort{-it.dtCreated}

вы можете попробовать

things.sort{a,b-> b.dtCreated<=>a.dtCreated}

reverse() ничего не делает, потому что он создает новый список вместо мутирования существующего.

things.sort{it.dtCreated}
things.reverse(true)

должен работать

things = things.reverse()

.

Ответ 2

Как насчет

things.sort{it.dtCreated}
Collections.reverse(things)

Посмотрите здесь для более полезных утилит списка.

Ответ 3

Вы также можете использовать things.first() и things.last() для извлечения первого и последнего элементов списка.