Spec-Zone.ru › Kotlin 1.6

Группировка

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

Spec-Zone.ru

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