问题描述
假设我有两个流程:
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 个想要发出的东西,但为了示例起见,将其保留为两个。
解决方法
您可以使用 combine()
变换函数:
返回一个 Flow,其值由变换函数生成 结合每个流最近发出的值。
并像这样定义 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)
}