簡體   English   中英

RxJava / Android:組合兩個依賴的Observable的結果

[英]RxJava/Android: Combine result of two dependent Observables

我有兩個Observables

  1. Observable<A> getAObservable()返回A Observable
  2. Observable<B> getBObservable(A)返回'B'的Observable。

這里Observable<A>應該在Observable<B>之前執行,這樣它就可以將結果A傳遞給getBObservable()方法。 現在一旦Observable<B>完成,我需要結合這些observableObservable<AB>的結果Observable<AB>應該返回。

試用的選項:

  1. Observable<A>並在其上應用flatMap,以便將結果轉換為B 現在,此時我無法訪問A數據。 因此我無法返回Observable

    1. 我可以使用zip這樣一旦我得到Observable<A>Observable<B>的結果,我就可以將它們的結果合並到AB 但是在這里我不能設置Observable<A>應該在Observable<B>之前執行的依賴,並且我不能將Observable<A>的結果傳遞給Observable<B>

代碼庫:

public class Data {

    A a = new A();
    public Observable<AB> getABContext() {
        A a = new A();

        return getAObservable()
                .flatMap(new Func1<A, Observable<AB>>() {
                    @Override
                    public Observable<AB> call(final A a) {
                        return getBObservable(a)
                                .flatMap(new Func1<B, Observable<AB>>() {
                                    @Override
                                    public Observable<AB> call(B b) {
                                        return Observable.just(new AB(a, b));
                                    }
                                });
                    }
                });
    }

    private Observable<A> getAObservable() {
        return Observable.just(a);
    }

    private Observable<B> getBObservable(A a) {
        return Observable.just(new B(a));
    }

    private static class A {

    }

    private static class B {
        B (A a) {

        }
    }

    private static class AB {
        AB (A a, B b) {

        }
    }

}

請參閱flatMap文檔 它有重載方法,適用於zip功能:

    Observable<Pair<A, B>> abObservable = getAObservable()
      .flatMap(
        new Func1<A, Observable<? extends B>>() {
            @Override
            public Observable<? extends B> call(A a) {
                return getBObservable(a);
            }
        },
        new Func2<A, B, Pair<A, B>>() {
            @Override
            public Pair<A, B> call(A a1, B b1) {
                return new Pair<>(a1, b1);
            }
        }
      );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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