Spec-Zone.ru › Kotlin 2

foldTo

kotlin-stdlib/kotlin.collections/foldTo

Начиная с Kotlin: 1.1

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.

Возвращает

карту назначения, связывающую ключ каждой группы с результатом накопления элементов группы.

Параметры

initialValueSelector

функция, задающая начальное значение аккумулятора для каждой группы. Она вызывается со следующими параметрами:

  • key: ключ группы;

  • element: первый встретившийся элемент этой группы.

Если карта назначения уже содержит значение для некоторого ключа, это значение используется как начальное значение аккумулятора для соответствующей группы, а функция initialValueSelector для этой группы не вызывается.

operation

функция, которая вызывается для каждого элемента со следующими параметрами:

  • key: ключ группы, к которой относится этот элемент;

  • accumulator: текущее значение аккумулятора группы;

  • element: накапливаемый элемент источника.

Примеры


fun main() { 
   //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
}

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 по ключу и последовательно применяет операцию к элементам каждой группы, передавая в качестве аргументов ранее накопленное значение и текущий элемент, а результаты сохраняет в указанной карте назначения. Начальное значение аккумулятора для каждой группы — одно и то же значение initialValue.

Если карта назначения уже содержит значение для ключа некоторой группы, это значение используется как начальное значение аккумулятора для этой группы.

Возвращает

карту назначения, связывающую ключ каждой группы с результатом накопления элементов группы.

Параметры

operation

функция, которая вызывается для каждого элемента со следующими параметрами:

  • 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() }
    .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
}

© 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-to.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API