Kotlin MutableList是否有take、slice的就地修改版本?
关于MutableList就地保留前N个元素的实现方案
原生标准库实现
Kotlin 标准库没有直接提供名为take/slice的就地修改版本,不过你可以通过已有API组合实现等价效果,无需额外引入依赖:
// 保留前5个元素,就地修改 myList.subList(5, myList.size).clear()
原理说明:
MutableList.subList()返回的是原列表的视图,对返回子列表的修改会直接作用到原列表上,因此调用子列表的clear()方法就会移除原列表中从索引n到末尾的所有元素,最终仅保留前n个元素。
使用时需要注意参数合法性:n必须大于等于0,且小于等于列表总长度,否则会抛出IndexOutOfBoundsException。
自定义扩展函数实现你期望的调用方式
你可以通过 Kotlin 扩展函数封装上述逻辑,直接实现你想要的keepFirst调用风格:
fun <T> MutableList<T>.keepFirst(n: Int) { // 参数合法性校验 require(n >= 0) { "保留的元素个数 $n 不能为负数" } // 边界情况:要保留的元素个数大于等于当前列表长度时,无需修改直接返回 if (n >= size) return // 移除索引n及之后的所有元素 subList(n, size).clear() }
封装后即可直接按你期望的方式调用:
myList.keepFirst(5)
内容的提问来源于stack exchange,提问作者alturkovic
相关产品推荐
相关产品推荐

