Почему в RxJava 1.x оператор flatMap () реализован с помощью слияния?
public final <R> Observable<R> flatMap(Func1<? super T, ? extends Observable<? extends R>> func) {
if (getClass() == ScalarSynchronousObservable.class) {
return ((ScalarSynchronousObservable<T>)this).scalarFlatMap(func);
}
return merge(map(func));
}
Из вызова flatMap () я могу вернуть только один Observable, соответствующий <? extends Observable<? extends R>>
. Затем вызов map (func) переносит его в другой Observable, так что у нас есть что-то вроде этого Observable<? extends Observable<? extends R>>
. Это заставляет меня думать, что вызов merge () после map (func) не нужен.
Говорят, что оператор merge () выполняет следующее:
Сглаживает Observable, который испускает Observable, в один Observable, который испускает элементы, испускаемые этими Observable, без какого-либо преобразования.
Теперь внутри плоской карты у нас может быть только Observable, который испускает один Observable. Зачем сливаться? Что мне здесь не хватает?
Спасибо.