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

Kotlin嵌套列表遍历无法返回全部匹配值如何高效解决?

问题原因

原代码使用find函数匹配元素,该函数仅返回集合中第一个符合条件的元素,因此每个Group的value列表中只会取第一个未读的GroupValue,导致遗漏同分组内后续符合条件的条目。

最优实现方案

时间复杂度为O(N)(N为所有Group包含的GroupValue总个数),使用Kotlin惰性序列操作避免生成中间集合,大数量场景下性能表现最优:

fun main() {
    val value = listOf(
        Group(0, mutableListOf(GroupValue(true, "1"))),
        Group(1, mutableListOf(GroupValue(true, "2"))),
        Group(2, mutableListOf(GroupValue(false, "3"))),
        Group(3, mutableListOf(GroupValue(true, "4"))),
        Group(4, mutableListOf(GroupValue(false, "5"))),
        Group(5, mutableListOf(GroupValue(true, "6"))),
        Group(6, mutableListOf(GroupValue(true, "7"), GroupValue(false, "8"))),
        Group(7, mutableListOf(GroupValue(true, "9"), GroupValue(false, "10"))),
        Group(8, mutableListOf(GroupValue(false, "11"), GroupValue(false, "12"), GroupValue(false, "13"))),
        Group(9, mutableListOf(GroupValue(false, "14"), GroupValue(true, "15"))),
        Group(10, mutableListOf(GroupValue(true, "16")))
    )

    val list = value.slice(2..9)
    list.asSequence()
        // 展开所有分组下的GroupValue元素
        .flatMap { it.value }
        // 过滤未读且非空的元素
        .filter { it?.isRead == false }
        // 输出结果,也可替换为toList()收集结果
        .forEach { println(it) }
}
小数据量极简修改方案

如果数据量很小不需要考虑性能开销,直接修改原遍历逻辑即可:

list.forEach { messageGroup ->
    // 把find替换为filter,过滤当前分组所有符合条件的元素后遍历输出
    messageGroup.value.filter { it?.isRead == false }.forEach {
        println(it)
    }
}

内容的提问来源于stack exchange,提问作者Compose Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:54:04