Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sort list by date in descending order - groovy madness

I'm not able to sort a list of Objects by a Date in descending order

Let's say this is my class Thing

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

Inside the method I'm creating the List things

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

and then I populate the list with each associated Thing of each profile

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

Alright, now things has a lot of things in it, unfortunately the [order: 'desc'] was applied to each set of things and iI need to sort the whole list by dtCreated. That works wonderful like

            things.sort{it.dtCreated} 

Fine, now all the things are sorted by date but in the wrong order, the most recent thing is the last thing in the list

So I need to sort in the opposite direction, I didn't find anything on the web that brought me forward, I tried stuff like

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

and I'm not finding any groovy approach for such a standard operation, maybe someone has a hint how I can sort my things by date in descending order ? There must be something like orm I used above [sort: 'dtCreated', order: 'desc'] or isn't it?

like image 809
john Smith Avatar asked Jun 20 '13 21:06

john Smith


People also ask

How do you sort a list in descending order?

Sort in Descending order The sort() method accepts a reverse parameter as an optional argument. Setting reverse = True sorts the list in the descending order. Alternatively for sorted() , you can use the following code.


2 Answers

Instead of

things.sort{-it.dtCreated} 

you might try

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

reverse() does nothing because it creates a new list instead of mutating the existing one.

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

should work

things = things.reverse() 

as well.

like image 157
aduchate Avatar answered Oct 01 '22 11:10

aduchate


How about

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

Look here for some more useful list utilities

like image 28
Java Devil Avatar answered Oct 01 '22 11:10

Java Devil