Spec-Zone.ru › Kotlin 1.6

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

Стандартная библиотека 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
}
Последнее изменение: 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-operations.html

Spec-Zone.ru

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