如果我想将我的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. 什么是InterruptedException(Java)的.NET等价物?
- 3. 什么是ASP.NET Membership的Java等价物?
- 4. 什么是Java Socket.getInetAddress()的C#等价物?
- 5. 什么是.NET TypeCode的Java等价物?
- 6. 什么是Java DecimalFormat的c#等价物?
- 7. 什么是Debugger.Launch()的Java等价物?
- 8. 什么是PHP flush()的Java等价物?
- 9. 什么是Python的os.walk的等价物?
- 10. 什么是PHP的preg_quote的等价物?
- 11. MessageFormat的Pattern.quote()的等价物是什么?
- 12. 什么是Win32_OperatingSystem的64位等价物?
- 13. 什么是VC7中的strtok_s等价物?
- 14. java.time.Duration的Android等价物是什么?
- 15. 什么是“hasOwnProperty()”接口的等价物?
- 16. 什么是JQuery .load()的YUI等价物?
- 17. InputBindings的WinRT等价物是什么?
- 18. 什么是Silverlight中的OnRender等价物?
- 19. C#中TreeBidiMap的等价物是什么?
- 20. 什么是mac的win32等价物?
- 21. 什么是C#中的vbNullChar等价物?
- 22. 什么是ChrW(e.KeyCode)的C#等价物?
- 23. 什么是request.getRemoteUser()的JSP EL等价物?
- 24. 什么是JMX的.NET等价物?
- 25. 什么是Windows CE的kbhit等价物?
- 26. 什么是Python os.pathsep的等价物?
- 27. MySQL中'go'的等价物是什么?
- 28. Bash中%%〜nxD的等价物是什么?
- 29. C#中memset的等价物是什么?
- 30. 什么是HTTP_MOD_REWRITE的IIS等价物?
相关:http://stackoverflow.com/questions/34642254 –