Kotlin Grouping
Стандартная библиотека 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}