Kotlin中计算月度预测误差遇问题:forEachIndexed返回Unit而非Double
解决forEachIndexed返回Unit无法生成预测误差列表的问题
嘿,我完全懂你碰到的这个坑——forEachIndexed本质上是个执行型遍历函数,它的职责就是遍历集合并执行你给的逻辑,但根本不会返回任何有用的结果(返回值是Unit,也就是啥都没有),所以想用它来生成预测误差列表肯定行不通。
要生成每个月的预测误差(预测值-实际值),你应该用mapIndexed,这个函数专门用来转换集合元素并生成新集合,正好符合你的需求。
示例代码
假设你有两个长度相同的列表:
predictions: 存储每月预测值的List<Double>actuals: 存储每月实际值的List<Double>
用mapIndexed生成误差列表的代码如下:
val predictionErrors = predictions.mapIndexed { index, predictedValue -> predictedValue - actuals[index] }
为什么这个可行?
mapIndexed会遍历predictions的每个元素,同时把当前元素的索引和值传给你写的lambda表达式。你只需要在lambda里计算预测值-实际值,mapIndexed会自动把所有计算结果收集成一个新的List<Double>,这就是你要的每月预测误差列表啦。
额外提醒
一定要确保两个列表的长度一致!如果predictions和actuals长度不一样,直接用actuals[index]会抛出索引越界异常。如果存在长度不一致的可能,可以先做个判断:
val predictionErrors = if (predictions.size == actuals.size) { predictions.mapIndexed { index, predicted -> predicted - actuals[index] } } else { // 根据你的需求处理,比如返回空列表或者抛出自定义异常 emptyList() }
内容的提问来源于stack exchange,提问作者Hasan A Yousef
相关产品推荐
相关产品推荐

