组合许多 Kotlin 流以获取它们的当前值

Combine many Kotlin flows to get just their current value

我正在使用 return 流的首选项 API。 在某些情况下,我需要组合来自不同偏好的值。我知道我可以使用 flow.combine.

由于我需要合并的方法是一个 suspend 函数,并且流中的值不再需要流向任何地方,我也可以这样定义:

suspend fun <T> Flow<T>.currentValue(): T {
    var res: T? = null
    this.collect {
        res = it
    }
    return res!!
}

然后一次只读取一个值:

    val val1 = flow1.currentValue()
    val val2 = flow2.currentValue()
    val val3 = flow3.currentValue()

有更好的方法吗?或者我应该只使用 combine 方法?

您不需要定义 currentValue 函数。已经有一个 Flow.first() 函数,它 return 是 Fl​​ow 的第一个值。由于这些流程设计为始终发出具有当前偏好值的初始值,因此可以正常工作。

旁注,您的 currentValue() 函数永远不会 return 因为 collect 不会 return 直到 Flow 完成。

您是要对每个 Flow 单独调用 first() 还是 combine 所有 Flow 并在组合 Flow 上调用 first() 由您决定。我不认为这两种方式更清洁。