Groovy 自定义列表排序

Groovy 自定义列表排序,groovy,Groovy,您好,我有一个列表,其中包含元素[每日、每月、每周]或[每月、每周、每日]或[每周、每日] 我需要对列表进行排序,以便 [daily,monthly,weekly] == [daily,monthly,weekly] [monthly, weekly, daily] == [daily, monthly, weekly] [weekly, daily] == [daily, weekly] 有人能帮我一下吗?假设你的意思是你有一个字符串列表,那么这应该可以: customSorter =

您好,我有一个列表,其中包含元素
[每日、每月、每周]
[每月、每周、每日]
[每周、每日]

我需要对列表进行排序,以便

[daily,monthly,weekly] == [daily,monthly,weekly]

[monthly, weekly, daily] == [daily, monthly, weekly]

[weekly, daily] == [daily, weekly]

有人能帮我一下吗?假设你的意思是你有一个字符串列表,那么这应该可以:

customSorter = { 
  [ 'daily', 'monthly', 'weekly' ].indexOf( it )
}

assert [ 'daily', 'monthly', 'weekly' ].sort( customSorter ) == [ 'daily', 'monthly', 'weekly' ]
assert [ 'monthly', 'weekly', 'daily' ].sort( customSorter ) == [ 'daily', 'monthly', 'weekly' ]
assert [ 'weekly', 'daily' ].sort( customSorter ) == [ 'daily', 'weekly' ]
或者您可以这样做(以避免重复创建列表)

customSorter={a,b,order=[“每日”、“每月”、“每周”]->
订单。索引OF(a)订单。索引OF(b)
}

您能举例说明您的列表吗?什么是
每日
?一根绳子?具有特定类的对象?真的很难理解你的意思。。。另外,这与Grails有什么联系?嗨,Tim,这些只是stringsCool,那么我下面的答案应该可以,但我的问题是输入可能是每日(每周一次)的任意组合。所以我不能继续写所有的assert-right组合。assert是为了告诉你它是有效的。。。我不明白你的意思…我喜欢它,尽管每次调用闭包时创建一个全新的
ArrayList
是相当低效的。使用
def值=['daily'、'weekly'、'monthly']创建一次;def customSorter={values.indexOf(it)}
会更好。@IanRoberts很好的观点。。使用默认参数在我的答案中添加了第三个选项;-)
customSorter = { a, b, order=['daily','monthly','weekly'] ->
  order.indexOf( a ) <=> order.indexOf( b )
}