reactor-core/src/main/java/reactor/core/publisher/Mono.java
public final <R> Mono<R> publish(Function<? super Mono<T>, ? extends Mono<? extends
			R>> transform) {
		return onAssembly(new MonoPublishMulticast<>(this, transform));
	}
public final <R> Mono<R> publish(Function<? super Mono<T>, ? extends Mono<? extends
			R>> transform) {
		return onAssembly(new MonoPublishMulticast<>(this, transform));
	}
Share a {@link Mono} for the duration of a function that may transform it and
consume it as many times as necessary without causing multiple subscriptions
to the upstream.

@param transform the transformation function
@param <R> the output value type

@return a new {@link Mono}