reactor-core/src/main/java/reactor/core/publisher/Flux.java
public static <O> Flux<O> zip(Iterable<? extends Publisher<?>> sources,
			final Function<? super Object[], ? extends O> combinator) {

		return zip(sources, Queues.XS_BUFFER_SIZE, combinator);
	}
public static <O> Flux<O> zip(Iterable<? extends Publisher<?>> sources,
			final Function<? super Object[], ? extends O> combinator) {

		return zip(sources, Queues.XS_BUFFER_SIZE, combinator);
	}
public static < O > Flux < O > zip ( Iterable < ? extends Publisher < ? > > sources , final Function < ? super Object [ ] , ? extends O > combinator ) { return zip ( sources , Queues . XS_BUFFER_SIZE , combinator ) ; }
Zip multiple sources together, that is to say wait for all the sources to emit one
element and combine these elements once into an output value (constructed by the provided
combinator).
The operator will continue doing so until any of the sources completes.
Errors will immediately be forwarded.
This "Step-Merge" processing is especially useful in Scatter-Gather scenarios.

The {@link Iterable#iterator()} will be called on each {@link Publisher#subscribe(Subscriber)}.

<p>
<img class="marble" src="doc-files/marbles/zipIterableSourcesForFlux.svg" alt="">

@param sources the {@link Iterable} providing sources to zip
@param combinator The aggregate function that will receive a unique value from each upstream and return the value
to signal downstream
@param <O> the combined produced type

@return a zipped {@link Flux}
Zip multiple sources together that is to say wait for all the sources to emit one element and combine these elements once into an output value ( constructed by the provided combinator ) . The operator will continue doing so until any of the sources completes . Errors will immediately be forwarded . This Step - Merge processing is especially useful in Scatter - Gather scenarios .