2016-01-06 21 views

Trả lời

12

Đố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.

4

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?

Các vấn đề liên quan