Функция 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 работает со следующими типами коллекций:

Смотрите также

  • функцию fold,
    которая выполняет аналогичную операцию агрегации
  • функцию reduce,
    которая выполняет агрегацию без начального значения
  • функцию sum,
    которая вычисляет сумму элементов коллекции