您如何在存储库级别将多个流值作为对象发出?

问题描述

假设我有两个流程:

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,其值由变换函数生成 结合每个流最近发出的值。

source

并像这样定义 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)
}