2017-10-20 60 views
0

所以我有一個場景,我想結合兩個流動人員的最新成果,並與它做一些事情。手動觸發一個RxJava聯合最流動的

Flowable.combineLatest(
       info, 
       list, 
       BiFunction { ... } 
     ) 

在某些條件下,我需要能夠再次獲得結果,並從之前做一些不同的東西。所以我可以手動存儲combinelatest的結果,然後重複使用它們,但是我想,也許有一種方法可以添加第三個流,然後手動觸發onNext,以便再次傳播結果。這可能嗎?

回答

1

有兩種方法可將計算值保留以備後用。您可以創建一個充當中間變量的BehaviorSubject,該變量在定義時將具有計算值,或者您可以將可觀察值更新爲新的訂戶以獲得最新結果。

BehaviorSubject intermediateResult = BehaviorSubject.create();

Flowable.combineLatest(info, list, ...) 
    .subscribe(intermediateResult); 

另外,

Observable<Type> intermediateResult = Flowable.combineLatest(info, list, ...) 
    .replay(1) 
    .publish(); 

在這兩種情況下,訂閱intermediateResult將獲得最新的計算值,如果存在。

編輯:隨時進行功能選擇:

Observable<FunctionSelector> fnSelector; 

Observable<Type> intermediateResult = 
    Flowable.combineLatest(info, list, fnSelector, 
    (information, listToUse, selector) -> 
     getFunction(selector).apply(information, listToUse)) 
    .replay(1) 
    .publish(1); 
+0

我不想緩存。當需要時,我需要能夠得到兩種流動劑的組合結果。 BiFunction受外部變量影響 –

+0

如果您需要更改函數,那麼您可能希望將外部變量綁定到可觀察值,並將其作爲輸入鏈。我會盡快修改我的答案。 –

+0

會創造一個像這樣的作品的第三個流動:? https://stackoverflow.com/questions/42428472/my-subscribers-onnext-and-oncomplete-functions-do-not-run-when-i-call-onnext-wi @BobDalgleish –