Spec-Zone.ru › Kotlin 1.6

Операции записи в коллекции

Изменяемые коллекции поддерживают операции для изменения содержимого коллекции, например, добавления или удаления элементов. На этой странице мы опишем операции записи, доступные для всех реализаций 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
}

Обновление элементов

Списки и карты также предоставляют операции для обновления элементов. Они описаны в Операциях, специфичных для списков и Операциях, специфичных для карт. Для множеств обновление не имеет смысла, так как это фактически удаление одного элемента и добавление другого.

Последнее изменение: 07 апреля 2022
Операции агрегации Операции, специфичные для списков

© 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/collection-write.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API