Kotlin:如何将序列(协程)作为Iterable<T>传递

6

我不明白如何将协程传递到需要可迭代对象的函数中。

假设我有以下函数:

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

我想传递一个协程:

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

我该用什么代替??才能让它正常工作呢?我尝试使用buildIteratorbuildSequence,但它们都无法正常工作。

1
强制转换buildSequence{...}.asIterable()应该就足够了。 - yegodm
1个回答

6
你可以使用asIterable()
val seq = buildSequence {
    for (i in 1..5) {
        yield(i)
    }
}.asIterable()

iterate(seq)

谢谢。虽然我不理解为什么标准库中没有buildIterable,但我已将其添加到我的工具类中,作为buildSequence(builderAction).asIterable() - Amir Abiri
1
@AmirAbiri 这里有一个iterator函数。https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/iterator.html - Julian A.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接