Kotlin中对数据排序时sortedWith返回Unit无法获取结果如何解决
问题原因
- Kotlin集合的
sortedWith属于非原地排序方法,执行后会返回一个全新的已排序集合,不会修改原始的acountTransactionList - 你在
sortedWith后直接链式调用了forEach,而forEach的返回值是Unit,自然拿不到排序后的数组 - 你提前声明的
sortedList没有被赋值,始终是空列表,最后返回的原始列表完全没有应用排序规则
解决代码
如果明确要求返回ArrayList类型,可按以下方式修改:
// 提前提取日期格式化器,避免每次比较重复创建,提升性能 val dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy.") val cmp = compareBy<transactionsList> { LocalDate.parse(it.date, dateFormatter) } // 直接接收sortedWith返回的排序后列表,转换为ArrayList val sortedList: ArrayList<transactionsList> = acountTransactionList .sortedWith(cmp) .toCollection(ArrayList()) // 按需打印排序结果 sortedList.forEach(::println) // 返回处理完成的ArrayList return sortedList
可选优化方案
如果允许原地修改原始的可变列表,可以改用sortWith方法,该方法无返回值,会直接对原集合完成排序:
val dateFormatter = DateTimeFormatter.ofPattern("dd.MM.yyyy.") val cmp = compareBy<transactionsList> { LocalDate.parse(it.date, dateFormatter) } acountTransactionList.sortWith(cmp) acountTransactionList.forEach(::println) return acountTransactionList
额外建议:类名遵循大驼峰命名规范,把
transactionsList改为TransactionItem这类更符合语义的命名,避免和集合类型产生混淆。
内容的提问来源于stack exchange,提问作者Equlo
相关产品推荐
相关产品推荐

