Nếu tôi muốn thu thập bộ sưu tập Kotlin của mình vào bộ sưu tập không được tích hợp vào bộ đệm, tôi phải làm như thế nào?Tương đương Kotlin của Java Stream.collect là gì?
Trả lời
Đối với các trường hợp không được bao gồm trong các hoạt động được xây dựng toList()
v.v., bạn có thể sử dụng thực tế là việc thu thập chỉ là một lần. Vì vậy, cho
val list: List<Pair<String, Int>> = listOf("Ann" to 19, "John" to 23)
bạn có thể thu thập một bộ sưu tập của sự lựa chọn của bạn với một lần
val map: Map<String, Int> = list.fold(HashMap(), { accumulator, item ->
accumulator.put(item.first, item.second); accumulator})
Nếu bạn sau đó xác định một chức năng mở rộng
fun <T, R> Iterable<T>.collectTo(accumulator: R, accumulation: (R, T) -> Unit) =
this.fold(accumulator, { accumulator, item -> accumulation(accumulator, item); accumulator })
bạn có thể tiếp tục đơn giản hóa
val map2: Map<String, Int> = list.collectTo(HashMap(), { accumulator, item ->
accumulator.put(item.first, item.second) })
Althou gh trong trường hợp này tất nhiên bạn chỉ có thể sử dụng chức năng mở rộng .toMap
.
LƯU Ý:Đối với một số trường hợp phổ biến mà bạn sẽ sử dụng Stream.collect
từ Java 8, bạn có thể sử dụng chức năng đã stdlib hiện trong Kotlin. Đối với những người bạn không thể tìm thấy ở Kotlin, bạn có thể khám phá việc tạo luồng tùy chỉnh như được mô tả trong câu trả lời của @duncan. Câu trả lời này được thêm vào để giúp biết những gì có khả năng trong stdlib, vì vậy bạn có thể quyết định khi nào nên viết một cái gì đó tùy chỉnh. Nó trả lời tiêu đề của câu hỏi "Tương đương Kotlin của Java Stream.collect là gì?"
Có các hàm trong trung bình, đếm, phân biệt, lọc, tìm, nhóm, nối, ánh xạ, min, max, phân vùng, cắt, sắp xếp, tổng hợp, đến/từ mảng, tới/từ danh sách , đến/từ bản đồ, công đoàn, co-iteration, tất cả các mô hình chức năng, và nhiều hơn nữa. Ít 1-liners và không cần phải sử dụng cú pháp phức tạp hơn của Java 8. Tôi nghĩ rằng điều duy nhất còn thiếu trong lớp Java 8 Collectors
được tích hợp là tóm tắt.
Một SO bài viết bao gồm những tương đương trong những chi tiết là: What Java 8 Stream.collect equivalents are available in the standard Kotlin library?
- 1. Tương đương Kotlin của chuỗi Java [] là gì?
- 2. Tương đương .NET của NumberFormatException của Java là gì?
- 3. Tương đương với các trường Java tĩnh cuối cùng trong Kotlin là gì?
- 4. Scala tương đương với ClassName.class của Java là gì?
- 5. Scala tương đương với khối tĩnh của Java là gì?
- 6. Tương đương C# của Java DecimalFormat là gì?
- 7. tương đương .NET của @Deprecated trong java là gì?
- 8. Tương đương với Ruby cho StringReader của Java là gì?
- 9. tương đương C# tĩnh của {...} trong Java là gì?
- 10. Tương đương java với String.fromCharCode của javascript là gì?
- 11. Tương đương Smalltalk của tĩnh Java là gì?
- 12. Tương đương java của AggregateException từ .net là gì?
- 13. Tương đương Java của đối tượng Scala là gì?
- 14. Tương đương Java của thuộc tính Python() là gì?
- 15. C# tương đương với isInstance của Java() là gì?
- 16. Tương đương với System.out.println() của Java trong Javascript là gì?
- 17. Tương đương C# của MsgWaitForMultipleObjects là gì?
- 18. Tương đương GWT của setTimeout là gì?
- 19. Tương đương python của R là gì?
- 20. Tương đương Bluebird của `Q.when` là gì?
- 21. Tương đương .NET của JMX là gì?
- 22. Chính sách tương thích của Kotlin là gì?
- 23. Scala require() tương đương trong Kotlin
- 24. Java tương đương với PHP var_dump là gì?
- 25. Tương đương với lớp Java BigDecimal trong C# là gì?
- 26. Java 8: Tương đương với "UseSplitVerifier" là gì?
- 27. Java tương đương với preg_replace này là gì?
- 28. Chức năng 'nth_element' tương đương trong Java là gì?
- 29. Java tương đương với mã Scala này là gì?
- 30. Clojure tương đương với Overriding "bằng" trong java là gì?
liên quan: http://stackoverflow.com/questions/34642254 –