簡體   English   中英

Rxjava:如何在沒有完成所有可觀察對象的情況下合並多個可觀察對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM