fold
Версия Kotlin: 1.0
inline fun <T, R> Array<out T>.fold(initial: R, operation: (acc: R, T) -> R): R
inline fun <R> ByteArray.fold(initial: R, operation: (acc: R, Byte) -> R): R
inline fun <R> ShortArray.fold(initial: R, operation: (acc: R, Short) -> R): R
inline fun <R> IntArray.fold(initial: R, operation: (acc: R, Int) -> R): R
inline fun <R> LongArray.fold(initial: R, operation: (acc: R, Long) -> R): R
inline fun <R> FloatArray.fold(initial: R, operation: (acc: R, Float) -> R): R
inline fun <R> DoubleArray.fold(initial: R, operation: (acc: R, Double) -> R): R
inline fun <R> BooleanArray.fold(initial: R, operation: (acc: R, Boolean) -> R): R
inline fun <R> CharArray.fold(initial: R, operation: (acc: R, Char) -> R): R
Накапливает значение, начиная с начального значения и применяя операцию слева направо к текущему значению аккумулятора и каждому элементу.
Возвращает указанное начальное значение, если массив пуст.
Параметры
функция, которая принимает текущее значение аккумулятора и элемент и вычисляет следующее значение аккумулятора.
inline fun <T, R> Iterable<T>.fold(initial: R, operation: (acc: R, T) -> R): R
Накапливает значение, начиная с начального значения и применяя операцию слева направо к текущему значению аккумулятора и каждому элементу.
Возвращает указанное начальное значение, если коллекция пуста.
Параметры
функция, которая принимает текущее значение аккумулятора и элемент и вычисляет следующее значение аккумулятора.
inline fun <R> UIntArray.fold(initial: R, operation: (acc: R, UInt) -> R): R
inline fun <R> ULongArray.fold(initial: R, operation: (acc: R, ULong) -> R): R
inline fun <R> UByteArray.fold(initial: R, operation: (acc: R, UByte) -> R): R
inline fun <R> UShortArray.fold(initial: R, operation: (acc: R, UShort) -> R): R
Накапливает значение, начиная с начального значения и применяя операцию слева направо к текущему значению аккумулятора и каждому элементу.
Возвращает указанное начальное значение, если массив пуст.
Параметры
функция, которая принимает текущее значение аккумулятора и элемент и вычисляет следующее значение аккумулятора.
inline fun <T, K, R> Grouping<T, K>.fold(initialValueSelector: (key: K, element: T) -> R, operation: (key: K, accumulator: R, element: T) -> R): Map<K, R>
Группирует элементы источника Grouping по ключу, последовательно применяет операцию к элементам каждой группы, передавая в качестве аргументов ранее накопленное значение и текущий элемент, и сохраняет результаты в новой карте. Начальное значение аккумулятора задаётся функцией initialValueSelector.
Возвращает
Map, связывающую ключ каждой группы с результатом накопления элементов этой группы.
Параметры
функция, задающая начальное значение аккумулятора для каждой группы. Она вызывается со следующими параметрами:
key: ключ группы;element: первый встреченный элемент этой группы.
функция, вызываемая для каждого элемента со следующими параметрами:
key: ключ группы, к которой принадлежит этот элемент;accumulator: текущее значение аккумулятора группы;element: накапливаемый элемент источника.
Примеры
fun main() {
//sampleStart
val fruits = listOf("cherry", "blueberry", "citrus", "apple", "apricot", "banana", "coconut")
val evenFruits = fruits.groupingBy { it.first() }
.fold({ key, _ -> key to mutableListOf<String>() },
{ _, accumulator, element ->
accumulator.also { [_, list] -> if (element.length % 2 == 0) list.add(element) }
})
val sorted = evenFruits.values.sortedBy { it.first }
println(sorted) // [(a, []), (b, [banana]), (c, [cherry, citrus])]
//sampleEnd
}
inline fun <T, K, R> Grouping<T, K>.fold(initialValue: R, operation: (accumulator: R, element: T) -> R): Map<K, R>
Группирует элементы источника Grouping по ключу, последовательно применяет операцию к элементам каждой группы, передавая в качестве аргументов ранее накопленное значение и текущий элемент, и сохраняет результаты в новой карте. Начальным значением аккумулятора для каждой группы служит одно и то же значение initialValue.
Возвращает
Map, связывающую ключ каждой группы с результатом накопления элементов этой группы.
Параметры
функция, вызываемая для каждого элемента со следующими параметрами:
accumulator: текущее значение аккумулятора группы;element: накапливаемый элемент источника.
Примеры
fun main() {
//sampleStart
val fruits = listOf("apple", "apricot", "banana", "blueberry", "cherry", "coconut")
// collect only even length Strings
val evenFruits = fruits.groupingBy { it.first() }
.fold(listOf<String>()) { acc, e -> if (e.length % 2 == 0) acc + e else acc }
println(evenFruits) // {a=[], b=[banana], c=[cherry]}
//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/fold.html