Кажется, что эти 2 функции довольно похожи. Они имеют одну и ту же подпись (принимают rx.functions.Func1<? super T, ? extends Observable<? extends R>> func
), а их мраморные диаграммы выглядят точно так же. Невозможно вставить фотографии здесь, но здесь один для concatMap, и здесь один для flatMap. Кажется, что в описании результирующего Observable
есть некоторая тонкая разница, в которой один из выражений concatMap
содержит элементы, которые являются результатом объединения результатов Observables, а результат, созданный flatMap
, содержит элементы, которые являются результатом первого слияния полученных Observables, и испускает результат этого слияния.
Однако эта тонкость для меня совершенно неясна. Может ли кто-нибудь дать лучшее объяснение этой разницы и в идеале дать несколько примеров, иллюстрирующих эту разницу.