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 映射,將每個組的鍵與累積組元素的結果相關聯。