如果我想将我的 Kotlin 集合收集到 stdlib 中未内置的东西中,我该怎么做?
对于内置操作toList()等未涵盖的场景,您可以使用 collect 只是折叠的事实。所以给定
toList()
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扩展功能。
.toMap