我找到了一种简化方法,而不是使用两个flatmap
和filter
val a = Observable.just(false)
val b = Observable.just(true)
val x = Observable.just(Unit)
x.flatMap { a }
.filter { !it }
.flatMap { b }
.filter { it }
.subscribe {
// a must be false and b must be true
}
我想过滤,因此仅当a为false且b为true时,subscribe只调用,上面的代码是正确的,但是我想找到一种使它更简单的方法;我尝试使用concat,但是我不知道为什么我不能使用它。
最佳答案
您可以通过多种方式来实现。选择simpler
解决方案是基于意见的,并且取决于您如何处理a
和b
发出的项目。尽管在测试Observable.just
时,后者可能并不那么明显,但是当涉及到更复杂的Observables
时,您可以看到其中的区别。
在您的示例中,仅当b
具有正确的值时,才订阅a
。那是故意的吗?
对我来说,更干净的解决方案是对它们进行zip
并“一起”比较内容。但这期望两个Observable
中的项目都可能会发出一个项目。
Observable.zip(a, b, BiFunction { a, b -> Pair(a, b) })
.filter { !it.first && it.second }
.subscribe {
// a must be false and b must be true
}
编辑:
为了给您示例一个完成此操作的不同方法,下面是一个没有
filter
的示例:Observable.zip(a.takeWhile { !it }, b.takeWhile { it }, BiFunction { _, _ -> Unit })
.subscribe {
// a must be false and b must be true
}
(请记住,他们对
a
和b
的期望不同)关于kotlin - 哪个RxJava运算符使其更简单,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61054321/