发出并行流但始终包括所有流的最后一个发射的可观察或运算符

时间:2019-06-14 14:34:44

标签: rx-java2

是否存在一个可观测值或Rx运算符,它可以获取多个可观测值(多个流)并将它们一起显示在一个函数中,并且提供每个流的最新发射?我能找到的最接近的是CombineLast,但是只有在所有流都发出一个项目的情况下,它才起作用。如果我有4个可观察物,但只有3个发射了东西,那么我想查看其中的3个。如果这3个发射了一个持续不断的发射,但是另外两个在一段时间后没有发射任何东西,我仍然想查看那些2和不断发出的最新消息。

我不想要的是将所有流合并为一个的东西。它们必须保持分开。

1 个答案:

答案 0 :(得分:0)

您可以将它们与combineLatest结合使用,并提供一个将值包装到自定义类中的函数:

    Observable.combineLatest(
            source1,
            source2,
            source3,
            source44,
            Function4<String, String, String, String, LatestResult> { t1, t2, t3, t4 ->
                LatestResult(t1, t2, t3, t4)
            })
            .subscribe { latestResult ->
                // Access the latest results here:
                println(latestResult.text1)
                println(latestResult.text2)
                println(latestResult.text3)
                println(latestResult.text4)
            }
}

data class LatestResult(val text1: String, val text2: String, val text3: String, val text4: String)

此示例假定所有可观察对象都发出字符串,但您可以轻松更改它。