reactor-core/src/main/java/reactor/core/publisher/Mono.java
public final <T2, O> Mono<O> zipWith(Mono<? extends T2> other,
			BiFunction<? super T, ? super T2, ? extends O> combinator) {
		if (this instanceof MonoZip) {
			@SuppressWarnings("unchecked") MonoZip<T, O> o = (MonoZip<T, O>) this;
			Mono<O> result = o.zipAdditionalSource(other, combinator);
			if (result != null) {
				return result;
			}
		}

		return zip(this, other, combinator);
	}
public final <T2, O> Mono<O> zipWith(Mono<? extends T2> other,
			BiFunction<? super T, ? super T2, ? extends O> combinator) {
		if (this instanceof MonoZip) {
			@SuppressWarnings("unchecked") MonoZip<T, O> o = (MonoZip<T, O>) this;
			Mono<O> result = o.zipAdditionalSource(other, combinator);
			if (result != null) {
				return result;
			}
		}

		return zip(this, other, combinator);
	}
Combine the result from this mono and another into an arbitrary {@code O} object,
as defined by the provided {@code combinator} function.
<p>
An error or <strong>empty</strong> completion of any source will cause the other source
to be cancelled and the resulting Mono to immediately error or complete, respectively.

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

@param other the {@link Mono} to combine with
@param combinator a {@link BiFunction} combinator function when both sources
complete
@param <T2> the element type of the other Mono instance
@param <O> the element type of the combination

@return a new combined Mono