2013-06-20 4 views
32

i'm не в состоянии сортировать список объектов по дате в порядке descedentсписок сортировать по дате в порядке убывания - заводной безумие

позволяет сказать, что это мой класс Thing

class Thing { 

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

внутри метод i'm создания List things

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

      List things = [] 

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

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

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

  things.sort{it.dtCreated} 

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

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

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

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

любого намека заранее спасибо

+3

'things.sort {-it.dtCreated.time}' – vegemite4me

ответ

72

Вместо

things.sort{-it.dtCreated} 

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

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

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

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

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

things = things.reverse() 

, а также.

+0

Большое вам спасибо, первый из них отлично подходит для меня, я попробовал things.reverse() раньше, не работал для моего дела, но things.reverse (true) работает благодаря –

5

Как насчет

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

Look here для некоторого более полезного списка утилита

-5

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