2013-06-20 31 views
32

io non sono in grado di ordinare un elenco di oggetti da una data data descedentLista Ordina per data in ordine decrescente - follia Groovy

diciamo questo è il mio Classe cosa

class Thing { 

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

all'interno del metodo Sto creando il List things

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

      List things = [] 

e quindi i popolare l'elenco con ogni cosa associati di ciascun profilo

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

bene, ora things ha un sacco di cose in esso, purtroppo la [order: 'desc'] è stato applicato a ogni serie di cose e ho bisogno di ordinare l'intero elenco da dtCreated, che funziona meraviglioso come

  things.sort{it.dtCreated} 

Belle , ora tutte le cose sono ordinate per data ma nell'ordine sbagliato, la cosa più recente è l'ultima cosa nella lista

quindi ho bisogno di ordinare nella direzione opposta, non ho trovato nulla sul web che mi ha portato avanti, ho provato cose come

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

e non sto trovando alcun approccio groovy per un'operazione standard, forse qualcuno ha un suggerimento su come posso ordinare le mie cose per data in ordine descrittivo? ci deve essere qualcosa di simile a me usato sopra [sort: 'dtCreated', order: 'desc'] o non è vero?

per ogni accenno grazie in anticipo

+3

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

risposta

72

Invece di

things.sort{-it.dtCreated} 

si potrebbe provare

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

reverse() non fa nulla perché crea un nuovo elenco, invece di mutare quello esistente .

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

dovrebbe funzionare

things = things.reverse() 

pure.

+0

grazie mille, il primo è ottimo per me, ho provato cose.reverse() prima, non funziona per il mio caso ma cose.reverse (vero) funziona grazie –

5

Come su

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

Cercare here per alcune utility lista più utili

-5

È inoltre possibile utilizzare things.first() e things.last() per estrarre il primo e l'ultimo elemento del elenco.

Problemi correlati