[英]Rxjava: How to combine multiple observables without all observables completing?
我有多個熱觀測物,它們可能會發光,也可能不會發光。 結果,我想合並可觀察對象,然后在其中任何一個發出結果時處理結果,但是如果其他可觀察對象在項目上發出,則應將它們一起處理。
例如。
observable1 = PublishSubject<>()
observable2 = PublishSubject<>()
observable1.onNext(1)
observable1.onNext(2)
observable2.onNext("Test")
observable1.onNext(3)
應該發出:
(1, null)
(2, null)
(2, "Test")
(3, "Test")
也有可能在observable2
之前發出了observable1
CombineLatest
最接近我的需求,但是只有當所有可觀察對象至少發出一項時,它才會發出結果。 為此有反應式運算符嗎?
您可以將startWith
與每個源一起使用以提供一個初始值,或將BehaviorSubject
與一個初始值一起使用,然后在這些增強的Observable上應用combineLatest
。 但是,RxJava 2中不允許null
,因此您必須在可觀察元素類型中找到一個中性值。
PublishSubject<Integer> observable1 = PublishSubject.create()
PublishSubject<String> observable2 = PublishSubject.create()
Observable.combineLates(
observable1.startWith(-100000),
observable2.startWith(""),
(a, b) -> a + b
)
.subscribe(System.out::println)
;
observable1.onNext(1)
observable1.onNext(2)
observable2.onNext("Test")
observable1.onNext(3)
要么
BehaviorSubject<Integer> observable1 = BehaviorSubject.createDefault(-10000)
BehaviorSubject<String> observable2 = BehaviorSubject.createDefault("")
Observable.combineLates(
observable1,
observable2,
(a, b) -> a + b
)
.subscribe(System.out::println)
;
observable1.onNext(1)
observable1.onNext(2)
observable2.onNext("Test")
observable1.onNext(3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.