Как создать 2 почтовых индекса и объединить наблюдаемые? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть синхронная наблюдаемая и 10 других асинхронных наблюдаемых, которые зависят от наблюдаемой синхронизации. как сжать их вместе и получить конечный результат? Zip принимает только 9 аргументов ... если мне нужно разделить его на 2 zip, как это сделать, поскольку у меня есть только 1 синхронная наблюдаемая. Пожалуйста помоги. Ниже приведен код: Здесь учетная запись является синхронной ..

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();

1 Ответ

0 голосов
/ 24 июня 2019

Как я уже упоминал в комментарии: вы можете разделить архивирование на 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()))
    }
)

Где TmpObjectForFirstThree и TmpObjectForFirstSeven - это некоторые классы данных, которые имеют только 3 и 7 полей.

...