Kotlin:如何创建用于更新列表元素的自定义扩展函数
实现自定义的List更新扩展函数
情况1:原地修改MutableList
如果需要直接修改原可变列表(MutableList),可以编写如下扩展函数:
fun <T> MutableList<T>.update(predicate: (T) -> Boolean, newValueProvider: () -> T) { this.forEachIndexed { index, item -> if (predicate(item)) { this[index] = newValueProvider() } } }
使用示例:
val dogs = mutableListOf("shiba", "golden", "samoid") // 按你期望的写法调用 dogs.update { it == "shiba" } { "doge" } // 执行后dogs变为 ["doge", "golden", "samoid"]
这个函数逻辑直接:遍历列表,对符合predicate条件的元素,用newValueProvider生成的新值原地替换。
情况2:针对不可变List返回新列表
如果你的列表是用listOf创建的不可变列表,不想修改原列表而是生成新列表,可以用这个版本:
fun <T> List<T>.update(predicate: (T) -> Boolean, newValueProvider: () -> T): List<T> { return this.map { item -> if (predicate(item)) newValueProvider() else item } }
使用示例:
val dogs = listOf("shiba", "golden", "samoid") val updatedDogs = dogs.update { it == "shiba" } { "doge" } // updatedDogs为 ["doge", "golden", "samoid"],原dogs保持不变
这个版本是对map的语义化封装,完全贴合你想要的简洁写法。
内容的提问来源于stack exchange,提问作者xX_Xeno_Blade_Xx
相关产品推荐
相关产品推荐

