2013-06-20 16 views
32

nie jestem w stanie uporządkować listę obiektów przez datę w celu descedentlista sortować według daty w kolejności malejącej - Groovy szaleństwo

powiedzmy to moja klasa Rzecz

class Thing { 

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

wewnątrz Sposób jestem tworzenia List things

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

      List things = [] 

a potem wypełnić listę każdego powiązanego rzeczą każdego profilu

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

porządku, teraz things ma wiele rzeczy w nim, Unfortunatly [order: 'desc'] została zastosowana do każdego zbioru rzeczy i muszę uporządkować całą listę według dtCreated, który działa cudowny jak

  things.sort{it.dtCreated} 

Dostrojenie , teraz wszystkie rzeczy są posortowane według daty, ale w niewłaściwej kolejności, ostatnia rzecz jest ostatnią rzeczą na liście

więc muszę posortować w przeciwnym kierunku, nie znalazłem nic w sieci rozgrywaj mnie naprzód, wypróbuj takie rzeczy jak

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

i nie znajduję żadnego groovyego podejścia do takiej standardowej operacji, może ktoś ma podpowiedź, jak mogę sortować moje rzeczy według daty w kolejności descedant? musi być coś takiego jak w przypadku, którego użyłem powyżej [sort: 'dtCreated', order: 'desc'] czy nie?

za wszelkie podpowiedzi Dzięki z góry

+3

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

Odpowiedz

72

Zamiast

things.sort{-it.dtCreated} 

można spróbować

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

odwróconych() nie robi nic, ponieważ tworzy nową listę zamiast mutacji istniejący .

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

powinien działać

things = things.reverse() 

również.

+0

dziękuję bardzo, pierwszy wielki dla mnie, spróbuj rzeczy.reverse() wcześniej, nie działa dla mojej sprawy, ale rzeczy.reverse (true) działa dzięki –

5

Jak o

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

Look here dla niektórych bardziej przydatnych lista narzędzi

-5

Można również użyć things.first() i things.last(), aby wyodrębnić pierwszy i ostatni element lista.

Powiązane problemy