【问题标题】:How to sort objects list in case insensitive order?如何以不区分大小写的顺序对对象列表进行排序?
【发布时间】:2018-06-01 18:52:26
【问题描述】:

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

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

stringList.sortWith(String.CASE_INSENSITIVE_ORDER)

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

Place 是一个包含 2 个字段的简单类 - name: Stringid: Int,我想按 name 字段对这些地点进行排序。

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

【问题讨论】:

标签: kotlin


【解决方案1】:

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

试试:

places.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it.name }))

【讨论】:

  • 很好的答案。谢谢!
  • 仅供参考 places.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER) { it.name }) 工作方式相同,通常是最终 lambda 参数的编写方式。 places.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, Place::name)) 也可以写成。
  • 如何为两个字段做这个不区分大小写的顺序?所以例如首先是it.name,然后是it.last name?
  • @ehemient 如何为两个字段执行此不区分大小写的顺序?所以例如首先是it.name,然后是it.last name?
  • @K.Os 看起来 compareBy 可以采用 lambda 的可变参数,请参阅此答案:stackoverflow.com/a/37259451/346912
【解决方案2】:

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

myList.sortedBy { it.name?.toLowerCase() }

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

myList.sortedByDescending { it.name?.toLowerCase() }

【讨论】:

  • 如何为两个字段做这个不区分大小写的顺序?所以例如首先是 it.name,然后是 it.last name?
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 2023-04-10
  • 2018-01-11
  • 2013-04-17
相关资源
最近更新 更多