Kotlin嵌套列表映射问题:如何展平混合类型列表为List<FruitUiModel>
解决Kotlin嵌套列表映射后类型混合的问题
你当前的问题出在map操作的返回类型不一致:处理热带水果时返回的是List<FruitUiModel>,非热带水果返回单个FruitUiModel,最终导致列表类型变成List<Any>,无法直接展平。
要得到纯List<FruitUiModel>,只需要把map换成flatMap,同时让两个分支都返回可迭代的集合类型,flatMap会自动把所有子集合的元素合并成一个扁平列表:
val result: List<FruitUiModel> = listOfFruits.flatMap { fruit -> if (fruit.type == "tropical") { // 直接返回转换后的热带水果列表 fruit.tropicalFruits.map { tropicalFruit -> FruitUiModel(tropicalFruit.someStuff) } } else { // 将单个非热带水果包装成列表,统一返回类型 listOf(FruitUiModel(fruit.type)) } }
关键说明
flatMap的作用是:对每个元素执行映射操作(返回一个集合),然后将所有集合中的元素展平为单个列表- 非热带水果分支用
listOf()包装,确保两个分支的返回类型都是List<FruitUiModel>,避免类型不匹配
内容的提问来源于stack exchange,提问作者paxcow
相关产品推荐
相关产品推荐

