aggregate To
Начиная с Kotlin: 1.1
inline fun <T, K, R, M : MutableMap<in K, R>> Grouping<T, K>.aggregateTo(destination: M, operation: (key: K, accumulator: R?, element: T, first: Boolean) -> R): M
Группирует элементы источника Grouping по ключу и последовательно применяет операцию к элементам каждой группы, передавая в качестве аргументов предыдущее накопленное значение и текущий элемент, а результаты сохраняет в указанной карте назначения.
Ключ для каждого элемента предоставляется функцией Grouping.keyOf.
Результат
карта назначения, связывающая ключ каждой группы с результатом агрегирования элементов этой группы.
Параметры
функция, вызываемая для каждого элемента со следующими параметрами:
key: ключ группы, к которой принадлежит этот элемент;accumulator: текущее значение аккумулятора группы; оно может бытьnull, если это первыйelement, встретившийся в группе;element: элемент исходной последовательности, для которой выполняется агрегирование;first: указывает, является ли этот элемент первымelement, встретившимся в группе.
Если в карте назначения уже есть значение для некоторого ключа, элементы, агрегируемые для этого ключа, никогда не рассматриваются как first.
Примеры
fun main() {
//sampleStart
val numbers = listOf(3, 4, 5, 6, 7, 8, 9)
val aggregated = numbers.groupingBy { it % 3 }.aggregateTo(mutableMapOf()) { key, accumulator: StringBuilder?, element, first ->
if (first) // first element
StringBuilder().append(key).append(":").append(element)
else
accumulator!!.append("-").append(element)
}
println(aggregated.values) // [0:3-6-9, 1:4-7, 2:5-8]
// aggregated is a mutable map
aggregated.clear()
//sampleEnd
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/aggregate-to.html