reduceTo
inline fun <S, T : S, K, M : MutableMap<in K, S>> Grouping<T, K>.reduceTo( destination: M, operation: (key: K, accumulator: S, element: T) -> S ): M
Группирует элементы из источника Grouping по ключу и применяет операцию reduce к элементам каждой группы последовательно, начиная со второго элемента группы, передавая накопленное значение и текущий элемент в качестве аргументов, и сохраняет результаты в заданном отображении destination. Начальное значение аккумулятора — это первый элемент группы.
Если в отображении destination уже есть значение, соответствующее ключу некоторой группы, это значение используется в качестве начального значения аккумулятора для этой группы, и первый элемент этой группы также подвергается воздействию операции reduce.
fun main(args: Array<String>) {
//sampleStart
val animals = listOf("raccoon", "reindeer", "cow", "camel", "giraffe", "goat")
val maxVowels = mutableMapOf<Char, String>()
// grouping by first char and collect only max of contains vowels
val compareByVowelCount = compareBy { s: String -> s.count { it in "aeiou" } }
animals.groupingBy { it.first() }.reduceTo(maxVowels) { _, a, b -> maxOf(a, b, compareByVowelCount) }
println(maxVowels) // {r=reindeer, c=camel, g=giraffe}
val moreAnimals = listOf("capybara", "rat")
moreAnimals.groupingBy { it.first() }.reduceTo(maxVowels) { _, a, b -> maxOf(a, b, compareByVowelCount) }
println(maxVowels) // {r=reindeer, c=capybara, g=giraffe}
//sampleEnd
}Параметры
operation - функция, которая вызывается для каждого последующего элемента группы со следующими параметрами:
Возвращает отображение destination, сопоставляющее ключ каждой группы с результатом накопления элементов группы.
© 2010–2023 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/reduce-to.html