Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collections Kotlin与Java Stream.collect的等价物是什么?_Collections_Kotlin - Fatal编程技术网

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

Collections Kotlin与Java Stream.collect的等价物是什么?,collections,kotlin,Collections,Kotlin,如果我想将我的Kotlin集合收集到stdlib中没有内置的东西中,我该怎么做?对于内置操作toList()等未涵盖的场景,可以使用collect只是一个折叠的事实。如此给定 val list: List<Pair<String, Int>> = listOf("Ann" to 19, "John" to 23) val list:list=listOf(“安”到19,“约翰”到23) 您可以通过折叠收藏到您选择的收藏中 val map: Map<String

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

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

val list: List<Pair<String, Int>> = listOf("Ann" to 19, "John" to  23)
val list:list=listOf(“安”到19,“约翰”到23)
您可以通过折叠收藏到您选择的收藏中

val map: Map<String, Int> = list.fold(HashMap(), { accumulator, item ->
    accumulator.put(item.first, item.second); accumulator})
val-map:map=list.fold(HashMap(),{累加器,项->
累加器.put(item.first,item.second);累加器})
如果您定义了一个扩展函数

fun <T, R> Iterable<T>.collectTo(accumulator: R, accumulation: (R, T) -> Unit) = 
    this.fold(accumulator, { accumulator, item -> accumulation(accumulator, item); accumulator } )
fun Iterable.collectTo(累加器:R,累加器:(R,T)->单位)=
折叠(累加器,{累加器,项目->累加器(累加器,项目);累加器})
你可以进一步简化

val map2: Map<String, Int> = list.collectTo(HashMap(), { accumulator, item -> 
    accumulator.put(item.first, item.second) })
val-map2:Map=list.collectTo(HashMap(),{acculator,item->
累加器.put(item.first,item.second)})
虽然在这种情况下,您当然可以只使用
.toMap
扩展功能。

注意:对于一些常见的情况,您可以使用Java 8中的
Stream.collect
,但您可以使用Kotlin中已有的stdlib函数。对于那些在Kotlin中找不到的流,您可以按照@duncan的回答探索创建自定义流。添加此答案是为了帮助了解stdlib中的功能,以便您可以决定何时编写自定义内容。它回答了问题的标题“Kotlin与Java Stream.collect的等价物是什么?”

stdlib中有用于平均、计数、不同、过滤、查找、分组、连接、映射、最小、最大、分区、切片、排序、求和、到/从数组、到/从列表、到/从映射、联合、协同迭代、所有函数范例等的函数。简单的1行程序,无需使用更复杂的Java8语法。我认为内置Java8
收集器
类中唯一缺少的就是摘要

另一篇SO文章详细介绍了这些等价物:

相关: