У Flux есть несколько вариантов объединения издателей. Один из них - zip-оператор.

Zip ждет, пока каждый источник испускает один элемент, и объединяет эти элементы. На выходе создается кортеж с таким же количеством издателей, заключенных в zip-архив.

Как работает zip?

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

Это важный момент, о котором следует помнить, когда вы архивируете издателей, которые генерируют элементы разной длины, или если есть издатели, которые генерируют условно.

Следующее изображение помогает визуализировать поведение Zip -

Давайте посмотрим на несколько примеров:

Случай 1. Объединение издателей, которые выпускают один элемент

Вышеупомянутый тест проходит успешно. Здесь никаких сюрпризов.

Случай 2 - Объединение издателей, создающих несколько элементов

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

Выход 1 = кортеж (f11, f21, f31)

Выход 2 = кортеж (f12, f22, f32)

Вывод в консоль при запуске вышеуказанного теста:

Verifying count:
Zip output f11,f21,f31
Zip output f12,f22,f32
Verifying values:
Zip output f11,f21,f31
Zip output f12,f22,f32

Случай 3 - Объединение издателей, которые выпускают элементы разной длины

Здесь я объединяю трех издателей. Два из них испускают два значения, а третий - одно значение.

Обратите внимание, что следующий тест не проходит, если я ожидаю, что счетчик будет равен 2 в верификаторе шага.

В этом примере, хотя f1 и f2 выдают два значения, мы не видим их в пошаговом верификаторе. Есть только один выход, так как zip отправляет сообщение, как только завершается отправка самого короткого источника.

Вывод в консоль при запуске вышеуказанного теста:

Verifying count:
Zip output f11,f21,f31
Verifying values:
Zip output f11,f21,f31

Случай 4 - Объединение с издателем, который излучает Void

Это похоже на case-3, но здесь один из издателей возвращает пустое значение. В этом случае ожидаемое количество равно 0.

Ссылки:



Https://www.vinsguru.com/reactive-programming-reactor-combining-multiple-sources-of-flux-mono/