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

Kotlin中不改变对象类型过滤嵌套列表及类型问题解决

问题根因

你当前的实现返回类型不匹配,核心原因是map转换时直接返回了内层过滤后的List<ExamObj2>,最终得到的结果类型是List<List<ExamObj2>>,没有保留外层ExamObj的对象结构,自然不符合方法要求的List<ExamObj>返回值。

正确实现

由于你定义的ExamObj是数据类(data class),自带copy方法,可以在不手动写构造逻辑的前提下,基于原有对象生成替换了指定字段的新实例,全程不会修改原对象,也不会改变对象类型。

基础实现(保留所有外层ExamObj,仅替换每个对象内层过滤后的列表):

fun progress(respList: List<ExamObj>): List<ExamObj> {
    return respList.map { examObj ->
        val filteredSubList = examObj.objList.filter { it.age == 27 }
        examObj.copy(objList = filteredSubList)
    }
}

如果你需要额外排除内层列表过滤后没有任何符合条件项的ExamObj,可以用mapNotNull实现:

fun progress(respList: List<ExamObj>): List<ExamObj> {
    return respList.mapNotNull { examObj ->
        val filteredSubList = examObj.objList.filter { it.age == 27 }
        // 内层无符合条件项就返回null,mapNotNull会自动剔除这类空值
        filteredSubList.takeIf { it.isNotEmpty() }?.let { examObj.copy(objList = it) }
    }
}

注意:上述实现全程不会修改传入的原respList以及其中的原有对象,所有返回的ExamObj都是新生成的实例,符合不可变对象的操作规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:06:27