如果我想将我的Kotlin集合收集到stdlib中没有构建的东西中,我该怎么做?什么是Java Stream.collect的Kotlin等价物?
9
A
回答
12
对于内置操作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) })
Althou在这种情况下,你当然可以使用.toMap
扩展功能。
4
注:对于一些常见的情况下,你会使用Stream.collect
从Java 8中,您可以在科特林已经利用现有STDLIB功能。对于那些在Kotlin中找不到的人,您可以按照@duncan的回答中所述探索创建自定义流程。添加此答案是为了帮助您了解stdlib中的功能,以便您可以决定何时编写自定义内容。它回答了问题标题“什么是Java Stream.collect的Kotlin等价物?”
中有STDLIB为平均值,计数,层次分明,过滤功能,发现,分组,连接,映射,最小值,最大值,分区,切片,排序,求和,向/从阵列,向/从列表,来自地图,联合,共同迭代,所有功能范例等等。小1行,不需要使用更复杂的Java 8语法。我认为从内置Java 8 Collectors
类中缺少的唯一东西是汇总。
另一个SO邮政覆盖这些换算公式详细为:What Java 8 Stream.collect equivalents are available in the standard Kotlin library?
相关问题
- 1. 什么是Java的String []的Kotlin等价物?
- 2. Kotlin中Java静态最终字段的等价物是什么?
- 3. 什么是.NET TypeCode的Java等价物?
- 4. 什么是InterruptedException(Java)的.NET等价物?
- 5. java中fopen_s()的等价物是什么?
- 6. 什么是Debugger.Launch()的Java等价物?
- 7. 什么是Java中的“ByRef”等价物?
- 8. java中cin.ignore()的等价物是什么?
- 9. 什么是Java DecimalFormat的c#等价物?
- 10. 什么是$ var的Java等价物?
- 11. 什么是PHP flush()的Java等价物?
- 12. 什么是C++ deque的Java等价物?
- 13. 什么是ASP.NET Membership的Java等价物?
- 14. 什么是Java Socket.getInetAddress()的C#等价物?
- 15. 什么是Python的os.walk的等价物?
- 16. 什么是PHP的preg_quote的等价物?
- 17. 什么是Hub的HttpContext.GetOwinContext()的等价物?
- 18. MessageFormat的Pattern.quote()的等价物是什么?
- 19. 什么是Process.Start的VB 6等价物?
- 20. 什么是android中的dataWithContentsOfURL等价物?
- 21. rlwinm的C++等价物是什么? (PowerPC)
- 22. 什么是HttpContext.Current.Request.RawUrl的WCF等价物?
- 23. RDFlib中rdf:ID的等价物是什么?
- 24. Monotouch中的CGPDFDocumentGetCatalog等价物是什么?
- 25. 什么是'document.getElementsByClassName'的Prototype 1.6.0+等价物?
- 26. 什么是C++中的instanceof等价物?
- 27. 什么是OS X的UIGraphicsGetCurrentContext()等价物?
- 28. 什么是DB2的Varchar(Max)等价物?
- 29. 什么是VC7中的strtok_s等价物?
- 30. Unity 5.3:什么是UnitEngine.Application.loadedLevel的等价物?
相关:http://stackoverflow.com/questions/34642254 –