public final <T2, O> Mono<O> zipWhen(Function<T, Mono<? extends T2>> rightGenerator,
			BiFunction<T, T2, O> combinator) {
		Objects.requireNonNull(rightGenerator, "rightGenerator function is mandatory to get the right-hand side Mono");
		Objects.requireNonNull(combinator, "combinator function is mandatory to combine results from both Monos");
		return flatMap(t -> rightGenerator.apply(t).map(t2 -> combinator.apply(t, t2)));
	}
public final <T2, O> Mono<O> zipWhen(Function<T, Mono<? extends T2>> rightGenerator,
			BiFunction<T, T2, O> combinator) {
		Objects.requireNonNull(rightGenerator, "rightGenerator function is mandatory to get the right-hand side Mono");
		Objects.requireNonNull(combinator, "combinator function is mandatory to combine results from both Monos");
		return flatMap(t -> rightGenerator.apply(t).map(t2 -> combinator.apply(t, t2)));
	}
public final < T2 , O > Mono < O > zipWhen ( Function < T , Mono < ? extends T2 > > rightGenerator , BiFunction < T , T2 , O > combinator ) { Objects . requireNonNull ( rightGenerator , "rightGenerator function is mandatory to get the right-hand side Mono" ) ; Objects . requireNonNull ( combinator , "combinator function is mandatory to combine results from both Monos" ) ; return flatMap ( t -> rightGenerator . apply ( t ) . map ( t2 -> combinator . apply ( t , t2 ) ) ) ; }
Wait for the result from this mono, use it to create a second mono via the
provided {@code rightGenerator} function and combine both results into an arbitrary
{@code O} object, as defined by the provided {@code combinator} function.

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

@param rightGenerator the {@link Function} to generate a {@code 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
Wait for the result from this mono use it to create a second mono via the provided { @code rightGenerator } function and combine both results into an arbitrary { @code O } object as defined by the provided { @code combinator } function .