Функция aggregate
Функция aggregate выполняет агрегацию элементов коллекции
с помощью указанной операции и начального значения.
Применяется к коллекциям типа Array, List, Set и Iterable.
Функция последовательно применяет операцию к аккумулятору
и каждому элементу коллекции, возвращая конечный результат.
Синтаксис
kotlininline fun <T, R> Array<out T>.aggregate(
initial: R,
operation: (acc: R, T) -> R
): R
kotlininline fun <T, R> Iterable<T>.aggregate(
initial: R,
operation: (acc: R, T) -> R
): R
kotlininline fun <T, R> List<T>.aggregate(
initial: R,
operation: (acc: R, T) -> R
): R
kotlininline fun <T, R> Set<T>.aggregate(
initial: R,
operation: (acc: R, T) -> R
): R
Пример
Вычислим сумму чисел массива с помощью функции aggregate:
kotlinval numbers = arrayOf(1, 2, 3, 4, 5)
val sum = numbers.aggregate(0) { acc, num -> acc + num }
println(sum)
Результат выполнения кода:
kotlinInt 15
Пример
Объединим строки списка в одну строку через запятую:
kotlinval letters = listOf('a', 'b', 'c', 'd', 'e')
val result = letters.aggregate("") { acc, char ->
if (acc.isEmpty()) char.toString()
else "$acc, $char"
}
println(result)
Результат выполнения кода:
kotlinString "a, b, c, d, e"
Пример
Найдем максимальное значение в наборе чисел:
kotlinval nums = setOf(10, 5, 8, 15, 3)
val max = nums.aggregate(Int.MIN_VALUE) { acc, num ->
if (num > acc) num else acc
}
println(max)
Результат выполнения кода:
kotlinInt 15
Пример
Посчитаем произведение всех элементов коллекции:
kotlinval values = listOf(2, 3, 4)
val product = values.aggregate(1) { acc, value -> acc * value }
println(product)
Результат выполнения кода:
kotlinInt 24
Для каких типов коллекций работает
Функция aggregate работает со следующими типами коллекций:
Array<T>- массивы элементовList<T>- списки элементовSet<T>- наборы уникальных элементовIterable<T>- любые итерируемые коллекции