Kotlin 流程中的 single() 和 first() 有什么区别?

Dan*_*fer 7 kotlin kotlin-flow

Kotlin 流程中的 single() 和 first() 有什么区别?您能举例说明何时使用哪种变体吗?

Dan*_*fer 3

回答我自己的问题。

first()将收集流的第一个元素。

val f = flow {
    var i = 0
    while (true) {
        emit(i)
        i = i.inc()
    }
}.first() // 0
Run Code Online (Sandbox Code Playgroud)

single()等待流关闭并返回该方法成功执行必须包含的一个元素。如果流为空或有多个元素,则会抛出异常。

callbackFlow {
    send("Hello World")
    close()
}.single() // "Hello World"
Run Code Online (Sandbox Code Playgroud)