Как выполнить операторы коллекции на самой коллекции в Kotlin? - PullRequest
0 голосов
/ 26 июня 2018

Есть ли способ выполнить оператор сбора, такой как «фильтр», на самой коллекции, а не получать новую отфильтрованную коллекцию?В Ruby большинство итераторов массивов имеют версию с восклицательным знаком в конце, что означает, что операция будет выполняться над самим объектом, а не возвращать новый объект.

Например, вместо выполнения:

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

есть ли способ сделать:

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

или что-то подобное в Kotlin?

1 Ответ

0 голосов
/ 26 июня 2018

Есть отдельные операторы для выполнения определенных операций, для filter есть retainAll:

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

Обратите внимание, что вам нужно использовать MutableList вместо Array, поскольку массивы имеют фиксированный размер, поэтому вы не можете удалять из них элементы.

Существует несколько других подобных решений, например sort, который работает на месте, и sorted, который возвращает новую коллекцию.

...