2012-09-27 269 views
3

您好我有一個包含元素[daily,monthly,weekly][monthly,weekly,daily][weekly,daily]自定義列表排序

我需要列表以這樣的方式那種

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

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

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

能有人請幫我在這

列表
+0

你能不能給你有名單的例子嗎?什麼是「每日」?一個字符串?一個具有特定類的對象?很難看出您的意思......此外,這與Grails連接的方式是什麼? –

+0

喜蒂姆這些只是字符串 – Siva

+0

很酷,然後我的答案應該工作 –

回答

5

假設你的意思是你有一個字符串列表,那麼這應該工作:

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=['daily','monthly','weekly'] -> 
    order.indexOf(a) <=> order.indexOf(b) 
} 
+1

我喜歡它,儘管每次調用閉包時創建一個全新的'ArrayList'效率相當低。使用'def values = ['daily','weekly','monthly']創建一次; def customSorter = {values.indexOf(it)}'會更好。 –

+1

@IanRoberts好點..用默認參數給我的答案增加了第三個選項;-) –