0

假设我有两个流程:

val x: Flow<Long?> = dao.getValueX()
val y: Flow<Long?> = dao.getValueY()

我可以有第三个流,z将这两个作为一对发射的流吗?

假设我有XYObject()XYObject 的样子

X: Long?
Y: Long?

我想基本上发出一个流z,它XYObject在上面的两个流中填充 X 和 Y 。我实际上有 3-4 个我想发出的东西,但为了示例,将其保留为 2 个。

4

1 回答 1

1

您可以使用combine()转换功能:

返回一个流,其值是通过组合每个流最近发出的值使用变换函数生成的。

资源

并像这样定义z

import kotlinx.coroutines.flow.combine

data class XYObject(val x: Long?, val y: Long?)

val x: Flow<Long?> = dao.getValueX()
val y: Flow<Long?> = dao.getValueY()
val z: Flow<XYObject> = x.combine(y) { _x: Long?, _y: Long? ->
    XYObject(_x, _y)
}
于 2021-03-24T12:54:35.300 回答