Spec-Zone.ru › Kotlin 1.8

Группировка

Стандартная библиотека Kotlin предоставляет расширяющие функции для группировки элементов коллекции. Основная функция groupBy() принимает лямбда-функцию и возвращает Map. В этом отображении каждый ключ — результат лямбда-функции, а соответствующее значение — List элементов, для которых этот результат возвращён. Эту функцию можно использовать, например, для группировки списка String по их первой букве.

Также можно вызвать groupBy() со вторым аргументом — функцией преобразования значения. В результирующем отображении groupBy() с двумя лямбда-функциями ключи, сгенерированные функцией keySelector, отображаются на результаты функции преобразования значения вместо исходных элементов.

fun main() {
//sampleStart
    val numbers = listOf("one", "two", "three", "four", "five")

    println(numbers.groupBy { it.first().uppercase() })
    println(numbers.groupBy(keySelector = { it.first() }, valueTransform = { it.uppercase() }))
//sampleEnd
}

Если требуется сгруппировать элементы и затем применить операцию ко всем группам одновременно, используйте функцию groupingBy(). Она возвращает экземпляр типа Grouping. Экземпляр Grouping позволяет применять операции ко всем группам ленивым образом: группы фактически создаются непосредственно перед выполнением операции.

В частности, Grouping поддерживает следующие операции:

  • eachCount() подсчитывает элементы в каждой группе.

  • fold() и reduce() выполняют операции fold и reduce над каждой группой как отдельной коллекцией и возвращают результаты.

  • aggregate() последовательно применяет заданную операцию ко всем элементам в каждой группе и возвращает результат. Это общий способ выполнения любых операций над Grouping. Используйте его для реализации пользовательских операций, когда fold или reduce недостаточно.

fun main() {
//sampleStart
    val numbers = listOf("one", "two", "three", "four", "five", "six")
    println(numbers.groupingBy { it.first() }.eachCount())
//sampleEnd
}
Последнее изменение: 10 января 2023 г.
Операторы плюс и минус Извлечение частей коллекции

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

Spec-Zone.ru

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