如何按本地字符串字母敏感排序?

3
假设我有一个单词列表,比如:
a, b, c, ą, ć, z, ż

我希望使用波兰语区域设置进行排序,例如:
a, ą, b, c, ć, z, ż

这是否有可能实现?

更新:

假设我需要按两个对象参数和使用collator对列表进行排序。 对于一个属性,我可以使用:

val collator = Collator.getInstance(context.getResources().getConfiguration().locale)

myList.sortedWith(compareBy(collator,  { it.lastName.toLowerCase() }))

如何添加按firstName排序的功能?(例如如果有两个相同的lastName,则按firstName排序)

1个回答

4

参考这里,尝试以下方法:

val list = arrayListOf("a", "b", "c", "ą", "ć", "z", "ż")
val coll = Collator.getInstance(Locale("pl","PL"))
coll.strength = Collator.PRIMARY
Collections.sort(list, coll)
println(list)

更新:

让您的对象实现 Comparable 接口:

override fun compareTo(other: YourObject): Int {
    val coll = Collator.getInstance(Locale("pl","PL"))
    coll.strength = Collator.PRIMARY
    val lastNameCompareValue =  coll.compare(lastName?.toLowerCase(Locale("pl","PL")),other.lastName?.toLowerCase(Locale("pl","PL")))
    if (lastNameCompareValue != 0) {
        return lastNameCompareValue
    }
    val firstNameCompareValue =  coll.compare(firstName?.toLowerCase(Locale("pl","PL")),other.firstName?.toLowerCase(Locale("pl","PL")))
    return firstNameCompareValue
}

试一下这个。


谢谢,你能看到我更新的问题吗?也许你有想法如何将你之前给我的答案与此结合。 - K.Os
@Konrad,你应该在你的对象中实现Comparable接口,并在compareTo方法中执行那个逻辑。 - Nongthonbam Tonthoi
我仍然不确定这个如何帮助我——我仍然无法对两个属性进行排序并使用Collator对它们进行排序。 - K.Os
这是一个不错的解决方案。唯一需要考虑的是,当我需要其他Collator时怎么办?通常它由Context提供,但在某些具有Comparable实现的数据类对象中拥有Context可能会很困难。 - K.Os
@Konrad,如果你还没有创建Application类的话,你可以通过创建一个Application类并从中获取实例来获得上下文,这样你就可以像这样做:val context = MyAppClass.getInstance() - Nongthonbam Tonthoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接