一尘不染

Java Stream.collect 的 Kotlin 等价物是什么?

javascript

如果我想将我的 Kotlin 集合收集到 stdlib 中未内置的东西中,我该怎么做?


阅读 109

收藏
2022-06-27

共1个答案

一尘不染

对于内置操作toList()等未涵盖的场景,您可以使用 collect 只是折叠的事实。所以给定

val list: List<Pair<String, Int>> = listOf("Ann" to 19, "John" to  23)

您可以通过折叠收集到您选择的集合

val map: Map<String, Int> = list.fold(HashMap(), { accumulator, item ->
    accumulator.put(item.first, item.second); accumulator})

如果你再定义一个扩展函数

fun <T, R> Iterable<T>.collectTo(accumulator: R, accumulation: (R, T) -> Unit) = 
    this.fold(accumulator, { accumulator, item -> accumulation(accumulator, item); accumulator } )

你可以进一步简化

val map2: Map<String, Int> = list.collectTo(HashMap(), { accumulator, item -> 
    accumulator.put(item.first, item.second) })

尽管在这种情况下,您当然可以只使用.toMap扩展功能。

2022-06-27