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 по ключу и применяет редуцирующую операцию к элементам каждой группы последовательно, начиная со второго элемента группы, передавая предварительно накопленное значение и текущий элемент в качестве аргументов, и сохраняет результаты в указанном назначенном отображении. Начальное значение аккумулятора — первый элемент группы.
Если в назначенном отображении уже есть значение, соответствующее ключу некоторой группы, это значение используется в качестве начального значения аккумулятора для этой группы, и первый элемент этой группы также подвергается операции.
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 — функция, которая вызывается для каждого последующего элемента группы со следующими параметрами:
Возвращает назначенное отображение, сопоставляющее ключ каждой группы с результатом накопления элементов группы.
© 2010–2020 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