foldTo
inline fun <T, K, R, M : MutableMap<in K, R>> Grouping<T, K>.foldTo( destination: M, initialValueSelector: (key: K, element: T) -> R, operation: (key: K, accumulator: R, element: T) -> R ): M
Группирует элементы из источника Grouping по ключу и применяет операцию к элементам каждой группы последовательно, передавая предыдущее накопленное значение и текущий элемент в качестве аргументов, и сохраняет результаты в заданном назначении карты. Начальное значение аккумулятора предоставляется функцией initialValueSelector.
fun main(args: Array<String>) {
//sampleStart
val fruits = listOf("cherry", "blueberry", "citrus", "apple", "apricot", "banana", "coconut")
val evenFruits = fruits.groupingBy { it.first() }
.foldTo(mutableMapOf(), { key, _: String -> key to mutableListOf<String>() },
{ _, accumulator, element ->
if (element.length % 2 == 0) accumulator.second.add(element)
accumulator
})
val sorted = evenFruits.values.sortedBy { it.first }
println(sorted) // [(a, []), (b, [banana]), (c, [cherry, citrus])]
evenFruits.clear() // evenFruits is a mutable map
//sampleEnd
}Параметры
initialValueSelector -
Функция, которая предоставляет начальное значение аккумулятора для каждой группы. Она вызывается с параметрами:
-
key: ключ группы; -
element: первый элемент, встречающийся в этой группе.
Если в назначении карте уже есть значение, соответствующее ключу, это значение используется как начальное значение аккумулятора для этой группы, и функция initialValueSelector для этой группы не вызывается.
operation - функция, которая вызывается для каждого элемента со следующими параметрами:
Возвращает назначение карты, сопоставляющей ключ каждой группы с результатом накопления элементов группы.
inline fun <T, K, R, M : MutableMap<in K, R>> Grouping<T, K>.foldTo( destination: M, initialValue: R, operation: (accumulator: R, element: T) -> R ): M
Группирует элементы из источника Grouping по ключу и применяет операцию к элементам каждой группы последовательно, передавая предыдущее накопленное значение и текущий элемент в качестве аргументов, и сохраняет результаты в заданном назначении карте. Начальное значение аккумулятора — это то же самое начальное значение для каждой группы.
Если в назначении карте уже есть значение, соответствующее ключу какой-либо группы, это значение используется в качестве начального значения аккумулятора для этой группы.
fun main(args: Array<String>) {
//sampleStart
val fruits = listOf("apple", "apricot", "banana", "blueberry", "cherry", "coconut")
// collect only even length Strings
val evenFruits = fruits.groupingBy { it.first() }
.foldTo(mutableMapOf(), emptyList<String>()) { acc, e -> if (e.length % 2 == 0) acc + e else acc }
println(evenFruits) // {a=[], b=[banana], c=[cherry]}
evenFruits.clear() // evenFruits is a mutable map
//sampleEnd
}Параметры
operation - функция, которая вызывается для каждого элемента со следующими параметрами:
Возвращает назначение карты, сопоставляющей ключ каждой группы с результатом накопления элементов группы.
© 2010–2022 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/fold-to.html