Как генерировать элементы из элемента в Flux (Spring Reactor) - PullRequest
1 голос
/ 02 июля 2019

Как я могу смоделировать ниже сценарий с реактором Flux?

  +-------+        +-------+        +-------+
  |       |        |       | -----> |       |
  |   A   | ---->  |   B   | -----> |   C   |
  |       |        |       | -----> |       |
  +-------+        +-------+        +-------+

A генерирует предметы, полученные B, которые из этого предмета будут испускать [0..N] предметов, которые будут получены C.

Как записать Flux, чтобы B мог испускать новые предметы на основе предметов, испускаемых A?

A a = ...
B b = ...
C c = ...

Flux.push((emitter) -> a.run(emitter))
 .howToMapOneEelementToMany((emitter, item) -> b.handle(emitter, item); // ???
 .doOnNext((item) -> c.handle(item))
 .subscribe();

EDIT: Пример

  • A создает пути к файлам Excel
  • B читает файл Excel и создает элемент на строку (может быть много строк или нет)
  • C сохраняет каждую строку в базе данных

1 Ответ

0 голосов
/ 03 июля 2019

По рекомендации @sfiss flatMap кажется хорошим кандидатом

ExcelFilePathReaderSink pathReader = ...
ExcelRowHandlerSink rowHandler = ...
OutputWriter outWriter = ...

Flux.push(pathReader)     // A
  .flatMap(rowHandler)    // B
  .doOnNext(outWriter)    // C
  .subscribe();
...