Операции записи в коллекцию
Изменяемые коллекции поддерживают операции для изменения содержимого коллекции, например, добавления или удаления элементов. На этой странице мы опишем операции записи, доступные для всех реализаций MutableCollection. Для более специфических операций, доступных для List и Map, см. Операции для списков и Операции для карт соответственно.
Добавление элементов
Чтобы добавить один элемент в список или множество, используйте функцию add(). Указанный объект добавляется в конец коллекции.
fun main() {
//sampleStart
val numbers = mutableListOf(1, 2, 3, 4)
numbers.add(5)
println(numbers)
//sampleEnd
}
addAll() добавляет каждый элемент объекта-аргумента в список или множество. Аргумент может быть Iterable, Sequence, или Array. Типы получателя и аргумента могут быть различными, например, вы можете добавить все элементы из Set в List.
При вызове для списков, addAll() добавляет новые элементы в том же порядке, в котором они идут в аргументе. Вы также можете вызвать addAll(), указав позицию элемента в качестве первого аргумента. Первый элемент коллекции-аргумента будет вставлен в эту позицию. Другие элементы коллекции-аргумента будут следовать за ним, сдвигая элементы получателя в конец.
fun main() {
//sampleStart
val numbers = mutableListOf(1, 2, 5, 6)
numbers.addAll(arrayOf(7, 8))
println(numbers)
numbers.addAll(2, setOf(3, 4))
println(numbers)
//sampleEnd
}
Вы также можете добавлять элементы, используя ин-плейс версию оператора plus - plusAssign (+=). При применении к изменяемой коллекции, += добавляет второй операнд (элемент или другую коллекцию) в конец коллекции.
fun main() {
//sampleStart
val numbers = mutableListOf("one", "two")
numbers += "three"
println(numbers)
numbers += listOf("four", "five")
println(numbers)
//sampleEnd
}
Удаление элементов
Чтобы удалить элемент из изменяемой коллекции, используйте функцию remove(). remove() принимает значение элемента и удаляет одну его встречу.
fun main() {
//sampleStart
val numbers = mutableListOf(1, 2, 3, 4, 3)
numbers.remove(3) // removes the first `3`
println(numbers)
numbers.remove(5) // removes nothing
println(numbers)
//sampleEnd
}
Для удаления нескольких элементов сразу существуют следующие функции:
-
removeAll()удаляет все элементы, которые присутствуют в коллекции-аргументе. В качестве альтернативы, вы можете вызвать её с предикатом в качестве аргумента; в этом случае функция удаляет все элементы, для которых предикат возвращаетtrue. -
retainAll()— это противоположностьremoveAll(): она удаляет все элементы, кроме тех, которые есть в коллекции-аргументе. При использовании с предикатом, она оставляет только элементы, которые ему соответствуют. -
clear()удаляет все элементы из списка и оставляет его пустым.
fun main() {
//sampleStart
val numbers = mutableListOf(1, 2, 3, 4)
println(numbers)
numbers.retainAll { it >= 3 }
println(numbers)
numbers.clear()
println(numbers)
val numbersSet = mutableSetOf("one", "two", "three", "four")
numbersSet.removeAll(setOf("one", "two"))
println(numbersSet)
//sampleEnd
}
Ещё один способ удаления элементов из коллекции — с использованием оператора minusAssign (-=) — ин-плейс версия minus. Второй аргумент может быть одиночным экземпляром типа элемента или другой коллекцией. С одиночным элементом справа, -= удаляет первое вхождение. В свою очередь, если это коллекция, удаляются все вхождения её элементов. Например, если список содержит дубликаты элементов, они удаляются сразу. Второй операнд может содержать элементы, которых нет в коллекции. Такие элементы не влияют на выполнение операции.
fun main() {
//sampleStart
val numbers = mutableListOf("one", "two", "three", "three", "four")
numbers -= "three"
println(numbers)
numbers -= listOf("four", "five")
//numbers -= listOf("four") // does the same as above
println(numbers)
//sampleEnd
}
Обновление элементов
Списки и карты также предоставляют операции для обновления элементов. Они описаны в Операциях для списков и Операциях для карт. Для множеств обновление не имеет смысла, так как на самом деле это удаление одного элемента и добавление другого.
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/collection-write.html