foldTo所在位置是kotlin.collections.foldTo,其相关用法介绍如下。

用法一

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 源的元素进行分组,并将operation 依次应用于每个组的元素,将先前累积的值和当前元素作为参数传递,并将结果存储在给定的destination 映射中。累加器的初始值由initialValueSelector 函数提供。

例子:



fun main(args: Array<String>) {
//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
}

输出:

[(a, []), (b, [banana]), (c, [cherry, citrus])]

参数

initialValueSelector-

为每个组提供累加器初始值的函数。它使用参数调用:

  • key :组的 key ;
  • element :在该组中遇到的第一个元素。

如果 destination 映射已经有一个对应于某个键的值,则该值将用作该组的累加器的初始值,并且不会为该组调用 initialValueSelector 函数。

operation- 使用以下参数在每个元素上调用的函数:

返回 destination 映射,将每个组的键与累积组元素的结果相关联。

用法二

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 源的元素进行分组,并将operation 依次应用于每个组的元素,将先前累积的值和当前元素作为参数传递,并将结果存储在给定的destination 映射中。累加器的初始值对于每个组都是相同的initialValue

如果destination 映射已经有一个对应于某个组的键的值,则该值用作该组的累加器的初始值。

例子:



fun main(args: Array<String>) {
//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
}

输出:

{a=[], b=[banana], c=[cherry]}

参数

operation- 使用以下参数在每个元素上调用的函数:

返回 destination 映射,将每个组的键与累积组元素的结果相关联。