У 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/