将CombineLatest与可观察变量数组结合使用

时间:2019-06-14 07:05:08

标签: kotlin rx-java2

我有4个文本输入字段。当用户在任何字段中输入文本时,我将启用一个按钮。为此,我将结合使用4个在其流中接收文本的可观察对象来使用CombineLatest。我对如何获取每个可观察物的最新价值一无所知。注意:我想使用一个数组,因为最终将有4个以上的输入字段。我也在寻找Kotlin的解决方案。

val text1: PublishSubject<String> = PublishSubject.create()
val text2: PublishSubject<String> = PublishSubject.create()
val text3: PublishSubject<String> = PublishSubject.create()
val text4: PublishSubject<String> = PublishSubject.create()

val inputs = Arrays.asList(
    text1, text2, text3, text4
)

Observable.combineLatest(inputs) {
  // How do I access the latest value from each observable?
}

2 个答案:

答案 0 :(得分:2)

在lambda内,您得到一个数组。该数组的第i个元素(在下面的示例中为arrayOfEmissions)对应于第i个可观察到的最新元素。

Observable.combineLatest(inputs) { arrayOfEmissions ->
}

答案 1 :(得分:0)

您可以将它们组合起来,并提供一个将值包装到自定义类中的函数:

    Observable.combineLatest(
            text1,
            text2,
            text3,
            text4,
            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)