2017-12-22 114 views
5

Tôi không hiểu làm thế nào để vượt qua một Coroutine nơi một Iterable là cần thiết.Kotlin: làm thế nào để vượt qua một chuỗi (coroutine) như Iterable <T>

Giả sử tôi có chức năng sau:

fun <T> iterate(iterable: Iterable<T>) { 
    for (obj in iterable) { 
     // do something.. 
    } 
} 

Tôi muốn vượt qua một coroutine:

iterate(?? { 
    for (obj in objects) { 
     yield(transform(obj)) 
    } 
}) 

Tôi phải gì để đặt thay vì ?? để làm việc này? Tôi đã thử buildIteratorbuildSequence nhưng không ai trong số họ làm việc.

+1

Đúc 'buildSequence {...} asIterable() 'nên là đủ. – yegodm

Trả lời

6

Bạn có thể sử dụng asIterable():.

val seq = buildSequence { 
    for (i in 1..5) { 
     yield(i) 
    } 
}.asIterable() 

iterate(seq) 
+0

Cảm ơn. Mặc dù tôi không hiểu tại sao không có 'buildIterable' trong lib chuẩn. Tôi đã thêm nó vào các utils của tôi là' buildSequence (builderAction) .asIterable() ' –

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