Spec-Zone.ru › Kotlin 2

Обзор операций с коллекциями

Стандартная библиотека Kotlin предлагает широкий набор функций для выполнения операций с коллекциями. К ним относятся простые операции, например получение или добавление элементов, а также более сложные: поиск, сортировка, фильтрация, преобразования и другие.

Функции расширения и функции-члены

Операции с коллекциями объявлены в стандартной библиотеке двумя способами: как функции-члены интерфейсов коллекций и как функции расширения.

Функции-члены определяют операции, необходимые для типа коллекции. Например, Collection содержит функцию isEmpty() для проверки на пустоту; List содержит функцию get() для доступа к элементам по индексу и так далее.

При создании собственных реализаций интерфейсов коллекций необходимо реализовать их функции-члены. Чтобы упростить создание новых реализаций, используйте скелетные реализации интерфейсов коллекций из стандартной библиотеки: AbstractCollection, AbstractList, AbstractSet, AbstractMap и их изменяемые аналоги.

Другие операции с коллекциями объявлены как функции расширения. Это функции фильтрации, преобразования, упорядочивания и обработки коллекций.

Общие операции

Общие операции доступны как для коллекций только для чтения, так и для изменяемых коллекций. Общие операции делятся на следующие группы:

  • Преобразования

  • Фильтрация

  • Операторы plus и minus

  • Группировка

  • Получение частей коллекции

  • Получение отдельных элементов

  • Упорядочивание

  • Агрегатные операции

Операции, описанные на этих страницах, возвращают результат, не изменяя исходную коллекцию. Например, операция фильтрации создаёт новую коллекцию, содержащую все элементы, удовлетворяющие предикату фильтрации. Результаты таких операций следует либо сохранять в переменных, либо использовать другим способом, например передавать другим функциям.


fun main() {
//sampleStart
    val numbers = listOf("one", "two", "three", "four")  
    numbers.filter { it.length > 3 }  // nothing happens with `numbers`, result is lost
    println("numbers are still $numbers")
    val longerThan3 = numbers.filter { it.length > 3 } // result is stored in `longerThan3`
    println("numbers longer than 3 chars are $longerThan3")
//sampleEnd
}

Для некоторых операций с коллекциями можно указать объект назначения. Объект назначения — это изменяемая коллекция, в которую функция добавляет результирующие элементы вместо того, чтобы возвращать их в новом объекте. Для выполнения операций с объектами назначения предусмотрены отдельные функции, в именах которых есть суффикс To, например filterTo() вместо filter() или associateTo() вместо associate(). Эти функции принимают коллекцию назначения в качестве дополнительного параметра.


fun main() {
//sampleStart
    val numbers = listOf("one", "two", "three", "four")
    val filterResults = mutableListOf<String>()  //destination object
    numbers.filterTo(filterResults) { it.length > 3 }
    numbers.filterIndexedTo(filterResults) { index, _ -> index == 0 }
    println(filterResults) // contains results of both operations
//sampleEnd
}

Для удобства эти функции возвращают коллекцию назначения, поэтому её можно создать непосредственно в соответствующем аргументе вызова функции:


fun main() {
    val numbers = listOf("one", "two", "three", "four")
//sampleStart
    // filter numbers right into a new hash set, 
    // thus eliminating duplicates in the result
    val result = numbers.mapTo(HashSet()) { it.length }
    println("distinct item lengths are $result")
//sampleEnd
}

Функции с объектом назначения доступны для фильтрации, сопоставления, группировки, объединения коллекций и других операций. Полный список операций с объектом назначения см. в справочнике по коллекциям Kotlin.

Операции записи

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

Для некоторых операций есть пары функций, выполняющих одну и ту же операцию: одна изменяет коллекцию на месте, а другая возвращает результат в виде отдельной коллекции. Например, sort() сортирует изменяемую коллекцию на месте, изменяя её состояние; sorted() создаёт новую коллекцию с теми же элементами, расположенными в отсортированном порядке.


fun main() {
//sampleStart
    val numbers = mutableListOf("one", "two", "three", "four")
    val sortedNumbers = numbers.sorted()
    println(numbers == sortedNumbers)  // false
    numbers.sort()
    println(numbers == sortedNumbers)  // true
//sampleEnd
}
2 октября 2025 г.
Получение отдельных элементовАгрегатные операции

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

Spec-Zone.ru

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