Есть несколько способов сделать это sh. Выбор решения 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
)