В чем разница между concatMap и flatMap в RxJava

Правильный способ использования - с тремя косой чертой. Два для синтаксиса (например, http: //) и один для точки монтирования файловой системы Linux, например sc.textFile (файл: ///home/worker/data/my_file.txt). Если вы используете локальный режим, достаточно только файла. В случае автономного кластера файл должен быть скопирован на каждом узле. Обратите внимание, что содержимое файла должно быть точно таким же, иначе искра возвращает смешные результаты.

41
задан Maroun 11 July 2019 в 10:52
поделиться

1 ответ

В первую очередь, flatMap - то же как mergeMap в Rxjs. Таким образом, это - один беспорядок меньше. Таким образом, существует два observables..

1) o1: простой список объектов от (['Kitty', 'Donald', 'Batman'])

2) process_o1 (): process_o1 () является функцией, которая берет в качестве одного параметра 'объект' и делает что-то с ним и возвращает Заметное, которое на завершении испускает 'сделанный с [объектом]'.

o1.pipe(mergeMap(item => process_o1(item))).subscribe(data => {
console.log(data);
});

Здесь мы собираемся видеть:-, сделанный с Kity.

сделанный с Donald.

сделанный с Batman.

без любой гарантии, что Kitty приезжает перед Donald и Donald, прибывает перед Batman. Это вызвано тем, что, как только внешнее заметное испускает объект, внутреннее заметное подписано.

===, Но в случае concatMap:-

o1.pipe(concatMap(item => process_o1(item))).subscribe(data => {
console.log(data);
});

у Нас есть гарантия ниже sequence:-

, сделанного с Kity.

сделанный с Donald.

сделанный с Batman.

, поскольку с concatMap оператором внутреннее Заметное не подписано перед предыдущими внутренними Заметными возвратами.

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

В затруднении, если Вы увлечены поддержанием порядка выполнения вещей, необходимо использовать concatMap. Но если Вы не заботитесь о порядке, можно продолжить mergeMap, который будет подписываться на весь внутренний Observables сразу и продолжать испускать значения как и когда они возвратятся.

0
ответ дан 26 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: