2014-09-18 50 views
0

我想用排序校書郎地圖口音,通過它顯然只能使用該名單與作品排序與絃樂地圖與校書郎

林:

import java.text.* 

    Collator collator = Collator.getInstance() 
    collator.setStrength(Collator.PRIMARY) 
    def list = [ 
    [name:"áaa", title:"foo1"], 
    [name:"zzz", title:"foo2"], 
    [name:"éee", title:"foo3"], 
    [name:"ába", title:"foo4"], 
    [name:"aaa", title:"foo5"] 
] 

    Collections.sort(list.name, collator); 

    ​list.collect{it.name}​ 

它返回[áaa, zzz, éee, ába, aaa]

但它應該返回:[áaa, aaa,ába,éee, zzz]

我該如何解決它?我需要保留原始地圖。 也許我可以使用其他職業Collat​​or

謝謝!

回答

1

Collections.sort修改列表list.name,您正在實時創建並且以前沒有存儲該列表。它確實得到排序,但結果丟失之後:

更新:添加排序而不丟失地圖結構。

import java.text.* 

def collator = Collator.instance 
collator.strength = Collator.PRIMARY 

def list = [ 
    [name:"áaa"], 
    [name:"zzz"], 
    [name:"éee"], 
    [name:"ába"], 
    [name:"aaa"] 
] 

listc = list*.name 

Collections.sort(listc, collator) 

assert listc == ['áaa', 'aaa', 'ába', 'éee', 'zzz'] 


// Sorting without losing the map structure. 

sortedList = list.sort(false) { a, b -> collator.compare a.name, b.name } 

assert sortedList == [ 
    [name:"áaa"], 
    [name:"aaa"], 
    [name:"ába"], 
    [name:"éee"], 
    [name:"zzz"], 
] 
+0

謝謝!但我怎樣才能保留原始地圖?例如,如果更復雜 'def list = [ [name:「áaa」,title:「foo1」], [name:「zzz」,title:「foo2」], [name:「éee」,標題: 「foo3」], [名: 「ABA」,標題: 「foo4」], [名: 「AAA」,標題: 「foo5」] ]' 我需要重新梳理原有的地圖 – msid 2014-09-18 19:29:30

+0

@ msid更新,它有幫助嗎? – Will 2014-09-18 19:40:59

+0

太棒了!謝謝! – msid 2014-09-18 19:52:45