假设我有两个流程:
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 个。
假设我有两个流程:
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 个。
您可以使用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)
}