fred05
fred05

Reputation: 53

How to sort a list of text+date strings in Groovy

I have a list of strings, each one contains text with date like this:

"foo_6.7.2016"
"foo_5.10.2016"
"foo_6.30.2016"
"foo_6.23.2016"
"foo_6.2.2016"
"foo_5.22.2016"

I need to sort them by Date and get this:

"foo_6.30.2016"
"foo_6.23.2016"
"foo_6.7.2016"
"foo_6.2.2016"
"foo_5.22.2016"
"foo_5.10.2016"

Upvotes: 2

Views: 2085

Answers (2)

tim_yates
tim_yates

Reputation: 171084

An alternative might be:

def foos = [ 
    "foo_6.7.2016",
    "foo_5.10.2016",
    "foo_6.30.2016",
    "foo_6.23.2016",
    "foo_6.2.2016",
    "foo_5.22.2016"
]

def sorted = foos.sort(false) { Date.parse('M.d.yyyy', it - 'foo_') }.reverse() 

Upvotes: 8

BZ.
BZ.

Reputation: 1946

For a quick answer that needs substantial cleanup:

def dates = [
"foo_6.7.2016"
"foo_5.10.2016"
"foo_6.30.2016"
"foo_6.23.2016"
"foo_6.2.2016"
"foo_5.22.2016"
]

def prefix = "foo_"
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M.d.yyyy")
def sorted_dates = dates.collect{ sdf.parse(
    it, new java.text.ParsePosition(prefix.length()) ) }.sort().reverse()
def newDates = sorted_dates.collect{ "${prefix} + ${sdf.format(it)}"}
println newDates

Upvotes: 4

Related Questions