You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:27:02