如何在Kotlin上对集合本身执行集合运算符?

时间:2018-06-26 08:39:48

标签: arrays dictionary collections filter kotlin

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

例如,不要这样做:

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

有没有办法做

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

还是科特林类似的东西?

1 个答案:

答案 0 :(得分:3)

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

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

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

还有其他一些类似的解决方案,例如可以使用sort和返回新集合的sorted