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

Kotlin中遍历列表时如何引用新转换后的前序值?

解决依赖前序转换值的列表生成问题

map函数没法满足你的需求,因为它是对每个元素独立处理的,没有办法访问正在构建的新列表中的前序元素——每次迭代都是孤立的,和之前的结果不关联。

针对你举的累加和场景,有两种简洁的Kotlin实现方式:

方式一:使用runningFold(推荐)

Kotlin 1.4及以上版本提供了runningFold函数,专门用于生成包含累积结果的序列,完美适配这种依赖前序值的场景:

val myList = listOf(1, 2, 3, 4, 5)
val result = myList.runningFold(0) { acc, current -> acc + current }.drop(1)
println(result) // 输出: [1, 3, 6, 10, 15]
  • runningFold的第一个参数是初始累加值,这里传0是因为第一个元素需要加0(没有前序值);
  • 闭包里的acc代表之前的累积结果,每次计算acc + current得到当前元素的转换值;
  • 生成的初始序列是[0, 1, 3, 6, 10, 15],用drop(1)去掉开头的初始值,就得到预期结果。

方式二:使用fold手动构建列表

如果需要更灵活的自定义逻辑(比如非累加的复杂转换),可以用fold配合可变列表实现:

val myList = listOf(1, 2, 3, 4, 5)
val result = myList.fold(mutableListOf<Int>()) { accumulatedList, current ->
    // 取已转换列表的最后一个值,没有的话用0
    val previousValue = accumulatedList.lastOrNull() ?: 0
    val currentTransformed = current + previousValue
    accumulatedList.add(currentTransformed)
    accumulatedList
}
println(result) // 输出: [1, 3, 6, 10, 15]

这里用可变列表作为累加器,每次计算完当前转换值后添加到列表中,最终返回整个列表。

内容的提问来源于stack exchange,提问作者paul go

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:40:53