如何在Groovy中对文本+日期字符串列表进行排序

时间:2016-07-06 16:25:16

标签: sorting groovy

我有一个字符串列表,每个字符串包含带有这样日期的文本:

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

我需要按日期对它们进行排序并得到它:

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

2 个答案:

答案 0 :(得分:6)

替代方案可能是:

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() 

答案 1 :(得分:4)

对于需要大量清理的快速回答:

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