public static <T1, T2, O> Mono<O> zip(Mono<? extends T1> p1, Mono<?
			extends T2> p2, BiFunction<? super T1, ? super T2, ? extends O> combinator) {
		return onAssembly(new MonoZip<T1, O>(false, p1, p2, combinator));
	}
public static <T1, T2, O> Mono<O> zip(Mono<? extends T1> p1, Mono<?
			extends T2> p2, BiFunction<? super T1, ? super T2, ? extends O> combinator) {
		return onAssembly(new MonoZip<T1, O>(false, p1, p2, combinator));
	}
public static < T1 , T2 , O > Mono < O > zip ( Mono < ? extends T1 > p1 , Mono < ? extends T2 > p2 , BiFunction < ? super T1 , ? super T2 , ? extends O > combinator ) { return onAssembly ( new MonoZip < T1 , O > ( false , p1 , p2 , combinator ) ) ; }
Merge given monos into a new {@literal Mono} that will be fulfilled when all of the given {@literal Monos}
have produced an item, aggregating their values as defined by the combinator function.
An error or <strong>empty</strong> completion of any source will cause other sources
to be cancelled and the resulting Mono to immediately error or complete, respectively.

<p>
<img class="marble" src="doc-files/marbles/zipTwoSourcesWithZipperForMono.svg" alt="">
<p>
@param p1 The first upstream {@link Publisher} to subscribe to.
@param p2 The second upstream {@link Publisher} to subscribe to.
@param combinator a {@link BiFunction} combinator function when both sources
complete
@param <T1> type of the value from p1
@param <T2> type of the value from p2
@param <O> output value

@return a {@link Mono}.
Merge given monos into a new { @literal Mono } that will be fulfilled when all of the given { @literal Monos } have produced an item aggregating their values as defined by the combinator function . An error or <strong > empty< / strong > completion of any source will cause other sources to be cancelled and the resulting Mono to immediately error or complete respectively .