Kotlin中结合列表计数与Live状态调整用户发帖上限的实现问题
问题原因
你当前使用的forEach仅做列表遍历,循环体内的it.status == "Live"只是单次布尔判断,没有做累计计数,最终只能拿到true/false两种结果,转成数值后最多为1,所以无论有多少条Live状态的帖子,最终都只减1。
正确实现方案
方案1:直接用列表自带的条件计数方法(推荐)
大部分编程语言的列表都内置了按条件统计元素数量的方法,无需手动遍历计数,以类Kotlin/JS/Java Stream语法为例:
- 先统计Live状态的帖子总数
val liveCount = uploadedPost.count { it.status == "Live" }
- 计算调整后的已用发帖额度:总上传数减去Live帖子数
val usedQuota = uploadedPost.size - liveCount
- 替换原有校验逻辑,判断调整后的已用额度是否小于基础上限2
if (usedQuota < 2) { // 允许发布新帖 }
方案2:手动用forEach实现计数
如果需要自己通过遍历实现计数,需要提前声明计数器变量,符合条件时累加:
var liveCount = 0 uploadedPost.forEach { if (it.status == "Live") { liveCount += 1 } } // 后续逻辑和方案1一致,计算usedQuota再做校验
效果验证
按照你举的示例:如果用户上传了4条帖子,其中2条为Live状态,计算得usedQuota = 4 - 2 = 2,不满足usedQuota < 2的条件,可用额度为0,符合预期。
内容的提问来源于stack exchange,提问作者Fusion Developers
相关产品推荐
相关产品推荐

