reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final Mono<T> reduce(BiFunction<T, T, T> aggregator) {
		if (this instanceof Callable){
			@SuppressWarnings("unchecked")
			Callable<T> thiz = (Callable<T>)this;
		    return convertToMono(thiz);
		}
	    return Mono.onAssembly(new MonoReduce<>(this, aggregator));
	}
public final Mono<T> reduce(BiFunction<T, T, T> aggregator) {
		if (this instanceof Callable){
			@SuppressWarnings("unchecked")
			Callable<T> thiz = (Callable<T>)this;
		    return convertToMono(thiz);
		}
	    return Mono.onAssembly(new MonoReduce<>(this, aggregator));
	}
Reduce the values from this {@link Flux} sequence into a single object of the same
type than the emitted items. Reduction is performed using a {@link BiFunction} that
takes the intermediate result of the reduction and the current value and returns
the next intermediate value of the reduction. Note, {@link BiFunction} will not
be invoked for a sequence with 0 or 1 elements. In case of one element's
sequence, the result will be directly sent to the subscriber.

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

@reactor.discard This operator discards the internally accumulated value upon cancellation or error.

@param aggregator the reducing {@link BiFunction}

@return a reduced {@link Flux}