我正在尝试使用 Collator 对 map 进行排序,显然它只适用于列表
我正在使用这个:
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]
我该如何修复它?我需要保留原始 map 。 也许我可以使用 Collator 之外的其他类
谢谢!!
最佳答案
Collections.sort
修改列表 list.name
,该列表是您即时创建且之前未存储的。它确实被排序了,但结果在之后就丢失了:
更新:添加排序而不丢失 map 结构。
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"],
]
关于java - 使用 Collator 对带重音符号的字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920414/