Spec-Zone.ru › Kotlin 1.9

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

Стандартная библиотека 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
}
Последнее изменение: 11 февраля 2021
Последовательности Операции преобразования коллекций

© 2010–2023 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