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

如何将对象嵌套列表中的指定元素置空?移除数组中所有"jim"实例

移除嵌套对象列表中的指定元素("jim")

背景说明

你的现有代码中,Vehicle和Load都是不可变数据类(属性为val),且people是不可变List。针对需求,提供两种符合Kotlin风格的解决方案:


方案一:保持不可变性,生成新集合

利用数据类自带的copy方法,创建过滤后的新对象集合,完全避免修改原数据:

fun main(args: Array<String>) {    
    val listOfObjects = arrayOf(
        Vehicle("blue", 2, Load(listOf("jim","jack"))), 
        Vehicle("black",3, Load(listOf("jim","jack", "johnny")))
    )

    // 过滤所有"jim"实例,生成新数组
    val filteredVehicles = listOfObjects.map { vehicle ->
        // 过滤当前Vehicle的Load中的people
        val filteredPeople = vehicle.load.people.filter { it != "jim" }
        // 复制Vehicle对象,替换为过滤后的Load
        vehicle.copy(load = vehicle.load.copy(people = filteredPeople))
    }.toTypedArray()

    // 验证结果
    filteredVehicles.forEach { println(it) }
}

data class Vehicle(val color: String, val seats: Int, val load: Load)
data class Load(val people: List<String>)

运行输出:

Vehicle(color=blue, seats=2, load=Load(people=[jack]))
Vehicle(color=black, seats=3, load=Load(people=[jack, johnny]))

方案二:修改为可变属性,直接修改原对象

如果业务允许修改原数据,可以将Load的people改为可变列表MutableList,并修改属性为var,直接在原集合上操作:

fun main(args: Array<String>) {    
    val listOfObjects = arrayOf(
        Vehicle("blue", 2, Load(mutableListOf("jim","jack"))), 
        Vehicle("black",3, Load(mutableListOf("jim","jack", "johnny")))
    )

    // 直接移除所有"jim"实例
    listOfObjects.forEach { vehicle ->
        vehicle.load.people.removeAll { it == "jim" }
    }

    // 验证结果
    listOfObjects.forEach { println(it) }
}

data class Vehicle(val color: String, val seats: Int, val load: Load)
data class Load(var people: MutableList<String>)

方案选择建议

  • 优先选方案一:符合Kotlin不可变编程的设计理念,无副作用,更安全,尤其适合多线程或函数式编程场景。
  • 方案二仅适合:必须修改原对象的特殊业务场景,注意可变状态可能带来的维护风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:10:28