如何在不区分大小写的顺序中对对象列表进行排序?

use*_*943 17 kotlin

假设我在Kotlin中有一个字符串列表: stringList: MutableList<String>

然后通过这样做很容易按不区分大小写的顺序对这样的列表进行排序:

stringList.sortWith(String.CASE_INSENSITIVE_ORDER)
Run Code Online (Sandbox Code Playgroud)

但是,如何按不区分大小写的顺序对对象列表进行排序?例如:places: MutableList<Place>

哪个Place是带有2个字段的简单类 - name: String而且id: Int,我想按name字段对这些地方进行排序.

我试图做这样的事情:places.sortedWith(compareBy { it.name })但是这个解决方案并没有考虑到字母的情况.

Sco*_*son 29

看起来compareBy可能会将Comparator作为参数,请参阅此处的文档:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.comparisons/compare-by.html

尝试:

places.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name }))
Run Code Online (Sandbox Code Playgroud)

  • FYI`placesortedWith(compareBy(String.CASE_INSENSITIVE_ORDER){it.name})`的作用相同,并且通常是如何写入最终的lambda参数.`places.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER,Place :: name))`也可以写成. (4认同)

Ivo*_*nov 12

升序排序 - 不区分大小写:

myList.sortedBy { it.name?.toLowerCase() }
Run Code Online (Sandbox Code Playgroud)

降序排序 - 不区分大小写:

myList.sortedByDescending { it.name?.toLowerCase() }
Run Code Online (Sandbox Code Playgroud)