с использованием типа Observable
в качестве примера, что на самом деле flatMap
делает:
отображает каждый выброс из восходящего потока в Observable<T>
,который эффективно преобразует весь поток в Observable<Observable<T>>
.чтобы избавить вас от синтаксиса, похожего на «обратный вызов ада», он затем ...
сглаживает этот поток просто Observable<T>
(я всегда думал, что по этой причине имя flatMap
кажется обратным)
, поэтому, используя ваш пример ввода, операция map выдаст:
2 --> Observable(2)
3 --> Observable(3)
0 --> Observable()
15 --> Observable(15)
12 --> Observable(12)
1 --> Observable(1)
в этой точке поток теперь Observable<Observable<Integer>>
.
, впоследствии уплощение внутреннее Observable<Integer>
излучение дает поток, который фактически совпадает с:
Observable(2, 3, 15, 12, 1)
... так как Observable.empty()
ничего не производит.
когда я понял ваш вопрос, вы думали, что излучение 0 эффективно завершит весь поток, но это не так, как работает flatMap
,однако, если вы ищете именно такое поведение, я думаю, вам подойдет какой-то вариант оператора switch*
.
Надеюсь, это поможет вам в этом!