reactor-core/src/main/java/reactor/core/publisher/Mono.java
public final <V> Mono<V> compose(Function<? super Mono<T>, ? extends Publisher<V>> transformer) {
		return defer(() -> from(transformer.apply(this)));
	}
public final <V> Mono<V> compose(Function<? super Mono<T>, ? extends Publisher<V>> transformer) {
		return defer(() -> from(transformer.apply(this)));
	}
Defer the given transformation to this {@link Mono} in order to generate a
target {@link Mono} type. A transformation will occur for each
{@link Subscriber}. For instance:

<blockquote><pre>
mono.compose(original -> original.log());
</pre></blockquote>
<p>
<img class="marble" src="doc-files/marbles/composeForMono.svg" alt="">

@param transformer the {@link Function} to lazily map this {@link Mono} into a target {@link Mono}
instance upon subscription.
@param <V> the item type in the returned {@link Publisher}

@return a new {@link Mono}
@see #as as() for a loose conversion to an arbitrary type
@see #transform(Function)