使用 sortedBy(...) 排序在 kotlin 中不起作用

Posted

技术标签:

【中文标题】使用 sortedBy(...) 排序在 kotlin 中不起作用【英文标题】:Sorting not working in kotlin by using sortedBy(...) 【发布时间】:2020-11-01 05:13:54 【问题描述】:

我正在尝试使用 val list = categoryList.sortedBy it 对此进行排序:listOf("P5","P1","P2","P3","P10"),但返回的是:[P1, P10, P2, P3, P5],根据我的要求,它应该返回 [P1, P2, P3, P5, P10],所以我在这里做错了什么?

【问题讨论】:

你的数组总是 ("P5","P1","P2","P3","P10") ? 【参考方案1】:

由于您直接按字符串值排序,因此您将得到该结果。相反,您可以按以下字符串的整数部分排序:

categoryList.sortedBy  it.substring(1).toInt() 

【讨论】:

【参考方案2】:

您正在排序 String 列表而不是 Integer 列表。这就是P10 排在P2 前面的原因。所以,请尝试以下方法进行排序:

 var list: List<String> = mutableListOf("P5","P1","P2","P3","P10")
            .sortedWith(compareBy( it.length ,  it ))

【讨论】:

你能告诉我这是如何工作的吗?我无法理解这种表达方式。 @sak 这里的 compareBy 带有 2 个比较器,字符串长度 it.length 和字符串值 it 。这样可以确保 P10 不会紧挨着 P1。【参考方案3】:

您正在排序字符串,而不是数字,因此 Kotlin 正在按字典顺序对它们进行排序。这就是为什么“P10”被评估为小于“P2”的原因。

【讨论】:

以上是关于使用 sortedBy(...) 排序在 kotlin 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中按值映射自动排序

高阶函数

Hive常用命令

选择html中的所有选项动态选择

在Java类中使用Kotlin注释类

hive分桶