如果我想將我的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 –