【问题标题】:How to create 2 zips and merge observables?如何创建 2 个 zip 并合并 observables?
【发布时间】:2019-06-23 22:30:29
【问题描述】:

我有一个同步可观察对象和 10 个其他异步可观察对象,它们依赖于同步可观察对象。如何将它们压缩在一起并获得最终结果? Zip 只接受 9 个参数。如果我必须将它分成 2 个 zip,该怎么做,因为我只有 1 个同步 observable。请帮忙。 下面是代码:这里账户是同步的..

Observable aObservable = getAObservable(accountId);      
Account account = aObservable.toBlocking().single();
Observable<List<C>> cObservable = getCObservable(saleInfo);
Observable<B> bObservable = getBObservable(account);
Observable<D> dObservable = getDObservable(account);
Observable<E> eObservable = getEObservable(account);
Observable<F> fObservable = getFObservable(account);
Observable<G> gObservable = getGObservable(account);
Observable<H> hObservable = getHObservable(account);
Observable<I> iObservable = getIObservable(account);
Observable<J> jObservable = getJObservable(account);

Observable<SaleFile> observable =
        Observable.zip(
                cObservable,
                bObservable,
                dObservable,
                eObservable,
                fObservable,
                gObservable,
                hObservable,
                iObservable,
                jObservable,
                (o1, o2, o3, o4, o5, o6, o7, o8, o9) ->
                        new SaleFile()
                                .withA(account)
                                .withB(o1)
                                .withC(o2)
                                .withD(o3)
                                .withE(o4)
                                .withF(o5)
                                .withG(o6)
                                .withH(o7)
                                .withI(o8)
                                .withJ(o9));

return observable.toBlocking().single();

【问题讨论】:

  • 我猜你不需要合并 2 个 ziped Observables,但 zip 也一样。
  • Zip 只接受 9 个参数。你能为此提出一个可行的解决方案吗?

标签: java observable rx-java rx-java2 rx-android


【解决方案1】:

正如我在评论中提到的:您可以将压缩分成 2 个可观察对象,然后再次压缩。所以它看起来像:

Observable<TmpObjectForFirstSeven> zip1 = Observable.zip(
    observable1,
    observable2,
    observable3,
    observable4,
    observable5,
    observable6,
    observable7,
    {(o1, o2, o3, o4, o5, o6, o7) -> 
         new TmpObjectForFirstSeven(o1, o2, o3, o4, o5, o6, o7)
    }
)

Observable<TmpObjectForFirstThree> zip2 = Observable.zip(
    observable8,
    observable9,
    observable10,
    {(o8, o9, o10) -> 
         new TmpObjectForSecondThree(o8, o9, o10)
    }
)

Observable<SaleFile> observable = Observable.zip(
    zip1, 
    zip2, 
    {(tmpForSeven, tmpForThree) -> 
        new SaleFile().withA(account)
                      .withB(tmpForSeven.o1())
                      .withC(tmpForSeven.o2())
                      .withD(tmpForSeven.o3())
                      .withE(tmpForSeven.o4())
                      .withF(tmpForSeven.o5())
                      .withG(tmpForSeven.o6())
                      .withH(tmpForSeven.o7())
                      .withI(tmpForThree.o8())
                      .withJ(tmpForThree.o9()))
    }
)

其中TmpObjectForFirstThreeTmpObjectForFirstSeven 是一些只有3 和7 个字段的数据类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2010-11-10
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多