Kotlin Grouping

Опубликовано: 1 Февраля, 2022

Стандартная библиотека Kotlin помогает группировать элементы коллекции с помощью функций расширения. Группировка означает сбор предметов по категориям. Здесь у нас есть функция groupBy (), которая принимает лямбда-функцию и возвращает карту. На этой карте каждый ключ является результатом лямбда-выражения, а соответствующее значение - это список элементов.
Мы также можем использовать функцию groupBy () со вторым лямбда-выражением, которое также называется функцией преобразования значений. Если мы используем две лямбда-функции, то полученный ключ keySelector сопоставляется с результатами функции преобразования значений вместо исходных элементов.

Kotlin program to demonstrate using groupBy() function –

fun main(args: Array<String>) {
    val fruits = listOf("apple", "apricot", "banana",
        "cherries", "berries", "cucumber")
    println(fruits.groupBy { it.first().toUpperCase() })
    println(fruits.groupBy(keySelector = { it.first() },
        valueTransform = { it.toUpperCase() }))
}

Output:

{A=[apple, apricot], B=[banana, berries], C=[cherries, cucumber]}
{a=[APPLE, APRICOT], b=[BANANA, BERRIES], c=[CHERRIES, CUCUMBER]}

If we want to apply some operations to group elements then it can be done by applying the function to all group at a time with the help of groupingBy() function. An instance of grouping type will be returned.

We can perform these operations on groups:

  • eachcount(): it counts the items in each group.
  • fold() and reduce(): perform these operation on each group separately and return the result.
  • aggregate(): it is generic way of grouping means applying a specific operation subsequently to all the elements in each group and returns the result. So, it is used to implement custom operations.

Kotlin program to demonstrate groupingBy() function –

fun main(args: Array<String>) {
    val fruits = listOf("apple", "apricot", "banana",
        "cherries", "berries", "cucumber")
    println(fruits.groupingBy { it.first() }.eachCount())
}

Выход:

{a = 2, b = 2, c = 2}