concatMap против flatMap - PullRequest
       7

concatMap против flatMap

0 голосов
/ 28 апреля 2018

Я смущен параметром prefetch из concatMap, который в основном звучит как MAX_CONCURRENCY.

prefetch: количество элементов для предварительной выборки из текущей наблюдаемой

Q1 : Означает ли это, что нужно предварительно выбрать элементы из Observable для отображения, а затем подписать по одному по порядку?

например, документы для concatMapSingle довольно ясны:

Отображает вышестоящие элементы в SingleSources и подписывается на них один после того, как другой преуспевает, испускает их значения успеха или завершается немедленно, если это либо наблюдаемая, либо текущая внутренняя Сбой SingleSource.

Q2 : Правда ли, что документ для concatMap может быть переписан как:

Отображает вышестоящие элементы в ObservableSources и подписывается на них. один за другим завершается?

Оригинальная версия документа для concatMap:

Возвращает новый Observable, который испускает предметы, полученные в результате применения функция, которую вы предоставляете для каждого элемента, испускаемого источником ObservableSource, где эта функция возвращает ObservableSource, и затем испускать предметы, которые в результате объединения тех, в результате ObservableSources.

Т.е. следующие строки в основном одинаковы (в терминах MAX_CONCURRENCY)?

int MAX_CONCURRENCY = 1;
Observable.just(1, 2, 3).flatMap(num -> Observable.just(num), false, MAX_CONCURRENCY);
Observable.just(1, 2, 3).concatMap(num -> Observable.just(num));

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Q1: означает ли это предварительную выборку элементов из Observable для отображения, а затем подписывать по одному по порядку?

В текущей реализации concatMap вышестоящие элементы предварительно выбираются, но не отображаются, пока не будет завершен предыдущий внутренний источник (или это самый первый элемент). Внутренние источники управляются один за другим.

Q2: правда ли, что документ для concatMap можно переписать так:

Я бы также упомянул поведение ошибки в первом предложении, как и в concatMapSingle. PR приветствуется.

Некоторые из старых javadocs сформулированы немного запутанно, более новые - более быстрые. Эти старые тоже раздражают меня, но если они не нуждаются в некотором расширении - из-за возросших вопросов / недоразумений в StackOverflow - я склонен оставлять их в покое.

следующие строки в основном одинаковы (с точки зрения MAX_CONCURRENCY)?

При Observable с обратное давление отсутствует, поэтому и concatMap, и flatMap должны ставить в очередь восходящие элементы до тех пор, пока они не будут готовы для отображения и подписки. concatMap prefetch подсказка должна быть больше похожа на capacityHint, поскольку она используется для определения размера внутренней очереди, содержащей дополнительные значения.

0 голосов
/ 28 апреля 2018

TL; DR: это правда. Нашел ответ на GitHub .

...