首页 > 解决方案 > 如何在 Kotlin 中对集合本身执行集合运算符?

问题描述

有没有办法在集合本身上执行集合运算符,例如“过滤器”,而不是接收新的过滤集合?在 Ruby 中,大多数数组迭代器都有一个末尾带有感叹号的版本,这意味着操作将在对象本身上执行,而不是返回一个新对象。

例如,而不是这样做:

var array = IntArray(10) { it }
array = array.filter { it % 2 == 0 }.toIntArray()

有没有办法:

val array = IntArray(10) { it }
array.filter! { it % 2 == 0 }

或在 Kotlin 中类似的东西?

标签: arraysdictionarycollectionsfilterkotlin

解决方案


有单独的运算符用于执行某些操作,因为filter,有retainAll

val array = MutableList(10) { it }
array.retainAll { it % 2 == 0 }
println(array) // [0, 2, 4, 6, 8]

请注意,您需要使用 aMutableList而不是 a Array,因为数组是固定大小的,因此您无法从中删除项目。

还有其他几个类似的解决方案,比如sort哪个可以工作,sorted哪个返回一个新集合。


推荐阅读