2017-02-14 7 views
0
Observable<List<Object1>> obs1 = getObservableList1().from({/*some code*/ 
}).map({/*some code*/}).toList({/*some code*/}); 

Observable<List<Object2>> obs2 = getObservableList2(); 

Observable.zip(obs1 , obs1, (res1, res2) -> { 

//some more code block1 

}).subscribe({ 

//some code after obs1 and obs2 
//some more code block2 

}); 

У меня есть ситуация, когда obs1 содержит пустой список, а никогда не называется. Но мне нужно просто вернуть пустой List как res1 и выполнить block1 и block2, как если бы список из obs1 имел элементы.OnCompleted, вызванный внутри zip

Вопрос заключается в том, чтобы пропустить from().map().toList() из obs1 и возврата пустой List в res1.

ответ

0

Это зависит от того, чего вы хотите достичь? Если вы хотите просто выполнить некоторый код после как источник Наблюдаемые в комплекте, используйте следующее:

Observable.merge(obs1 , obs2).doOnComplete(() -> { 
    .... 
}).subscribe(...) 

Если вместо этого вы должны сделать что-то со списком результатов, но obs2 иногда пусто (нет товаров), то вам просто нужно установить значение по умолчанию:

Observable<List<Object2>> obs2 = getObservableList2() 
     .defaultIfEmpty(Collections.emptyList());