Kotlin 将CombineTest与观察值数组一起使用

Kotlin 将CombineTest与观察值数组一起使用,kotlin,rx-java2,Kotlin,Rx Java2,我有4个文本输入字段。当用户在任何字段中输入文本时,我将启用一个按钮。为了实现这一点,我将使用CombineTest,通过组合4个在其流中接收文本的观察值。我不知道如何获取每一个观测值的最新值。注意:我想使用一个数组,因为最终将有4个以上的输入字段。我还在Kotlin寻找解决方案 val text1: PublishSubject<String> = PublishSubject.create() val text2: PublishSubject<String> = P

我有4个文本输入字段。当用户在任何字段中输入文本时,我将启用一个按钮。为了实现这一点,我将使用CombineTest,通过组合4个在其流中接收文本的观察值。我不知道如何获取每一个观测值的最新值。注意:我想使用一个数组,因为最终将有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?
}
val text1:PublishSubject=PublishSubject.create()
val text2:PublishSubject=PublishSubject.create()
val text3:PublishSubject=PublishSubject.create()
val text4:PublishSubject=PublishSubject.create()
val inputs=Arrays.asList(
text1,text2,text3,text4
)
可观察。组合相关测试(输入){
//我如何从每个可观测数据中获取最新值?
}

在lambda中,您可以得到一个数组。此数组的第i个元素(
ArrayOfMissions
,在下面的示例中)对应于第i个可观测元素发出的最新元素

Observable.combineLatest(inputs) { arrayOfEmissions ->
}

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

    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)
Observable.combinelatetest(
文本1,
文本2,
文本3,
文本4,
功能4{t1、t2、t3、t4->
最新结果(t1、t2、t3、t4)
})
.订阅{latestResult->
//在此处访问最新结果:
println(最新结果文本1)
println(最新结果文本2)
println(最新结果文本3)
println(最新结果文本4)
}
}
数据类LatestResult(val text1:String、val text2:String、val text3:String、val text4:String)

这还不清楚。根据位于的大理石图,我应该能够从每个可观察对象中获取最新的值,根据它们的值做出决定,然后返回一个可观察对象。CombineTest可能会为我提供每个单独流的最新值。但我仍然需要访问每个已发出项的值。只是不确定如何访问这些值。这些发出的项目在
arrayOfEmissions
中,你是对的。在代码运行之后,我注意到虽然arrayOfEmissions确实包含这些值,但由我的代码确定哪个数组项对应于文本输入字段。