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
相关产品推荐
相关产品推荐

