kotlin - 计算所有列表元素的总和,直到满足条件
问题描述
我遇到了以下问题:我有一个对象列表。让它成为 Test 类的对象:
data class Test(
var status: String, // Can be EXPIRED, WAIT
var amount: Float
)
数组是排序的,有状态EXPIRED
的对象位于开头和后面的对象的状态WAIT
位于。我需要计算具有状态的所有元素的总和EXPIRED
(如果它们存在),并添加到具有类型WAIT
(如果存在)的第一个对象的总和。现在我有以下代码:
private fun getRestructuringAmountToPay(): Float {
var i = 0
var sum = 0F
list?.forEachIndexed { iter, el ->
if (el.status != RestructingItemStatus.WAIT) {
i = iter
sum += el.amount ?: 0F
}
}
if (i + 1 < (list?.size ?: 0)) {
sum += list?.get(i+1)?.amount ?: 0F
}
return sum
}
但是有什么方法可以改进这段代码并使它像 Kotlin 一样漂亮吗?提前感谢您的帮助!
解决方案
因为您的列表已排序并且 EXPIRED
项目是第一个,您可以使用它firstOrNull
来查找第一个项目status == WAIT
当你迭代EXPIRED
项目时,你可以使用一个简单的变量来求和amount
,当你找到第一个WAIT
项目时,只需将总和分配给amount
var sum: Float = 0f
list.firstOrNull {
sum += it.amount
it.status == "WAIT"
}?.apply {
this.amount = sum
}
推荐阅读
- python - 为什么在定义函数后将leap值声明为false?
- angularjs - 如何防止ionic3中的url导航
- java - 引起:java.lang.illegalArgumentException
- c# - iTextSharp 不适用于 foreach 循环
- linux - sftp 通过 cronjob 中的 bash 脚本:找不到“get”和“rm”命令?
- python - 无论如何要避免正则表达式函数区分字符串中的特殊字符
- javascript - Safari - iPhone - 自动更改网站规模
- javascript - 使用 request-promise 使用 jwt 进行 API 调用。[ERR_INVALID_ARG_TYPE] 收到
- python - 在日期时间解析中使用当前月/日
- python - 创建一个新列,该列是满足两个条件的多个其他列中的日期数之和