web-dev-qa-db-fra.com

trier la liste par date en ordre décroissant - folie groovy

je ne suis pas en mesure de trier une liste d'objets par date dans l'ordre décroissant

disons que c'est ma classe

class Thing {

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

à l'intérieur de la méthode, je crée le List things

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

            List things = []

puis je remplis la liste avec chaque chose associée de chaque profil

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

bien, maintenant things a beaucoup de choses en elle, malheureusement le [order: 'desc'] a été appliqué à chaque ensemble de choses et j'ai besoin de trier la liste entière par dtCreated, qui fonctionne à merveille comme

            things.sort{it.dtCreated}

Très bien, maintenant toutes les choses sont triées par date mais dans le mauvais ordre, la chose la plus récente est la dernière de la liste

donc j'ai besoin de trier dans la direction opposée, je n'ai rien trouvé sur le web qui m'a fait avancer, j'ai essayé des trucs comme

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

et je ne trouve aucune approche groovy pour une opération aussi standard, peut-être que quelqu'un a une idée de comment je peux trier mes choses par date dans l'ordre décroissant? il doit y avoir quelque chose comme orm que j'ai utilisé ci-dessus [sort: 'dtCreated', order: 'desc'] ou n'est-ce pas?

pour tout indice merci d'avance

38
john Smith

Au lieu de

things.sort{-it.dtCreated}

tu pourrais essayer

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

reverse () ne fait rien car il crée une nouvelle liste au lieu de muter l'existant.

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

devrait marcher

things = things.reverse()

ainsi que.

87
aduchate

Que diriez-vous

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

Regardez ici pour quelques utilitaires de liste plus utiles

5
Java Devil