Обзор операций с коллекциями
Стандартная библиотека Kotlin предлагает широкий набор функций для выполнения операций с коллекциями. К ним относятся простые операции, например получение или добавление элементов, а также более сложные: поиск, сортировка, фильтрация, преобразования и другие.
Функции расширения и функции-члены
Операции с коллекциями объявлены в стандартной библиотеке двумя способами: как функции-члены интерфейсов коллекций и как функции расширения.
Функции-члены определяют операции, необходимые для типа коллекции. Например, Collection содержит функцию isEmpty() для проверки на пустоту; List содержит функцию get() для доступа к элементам по индексу и так далее.
При создании собственных реализаций интерфейсов коллекций необходимо реализовать их функции-члены. Чтобы упростить создание новых реализаций, используйте скелетные реализации интерфейсов коллекций из стандартной библиотеки: AbstractCollection, AbstractList, AbstractSet, AbstractMap и их изменяемые аналоги.
Другие операции с коллекциями объявлены как функции расширения. Это функции фильтрации, преобразования, упорядочивания и обработки коллекций.
Общие операции
Общие операции доступны как для коллекций только для чтения, так и для изменяемых коллекций. Общие операции делятся на следующие группы:
Операции, описанные на этих страницах, возвращают результат, не изменяя исходную коллекцию. Например, операция фильтрации создаёт новую коллекцию, содержащую все элементы, удовлетворяющие предикату фильтрации. Результаты таких операций следует либо сохранять в переменных, либо использовать другим способом, например передавать другим функциям.
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
}
© 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