reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final <C extends Collection<? super T>> Flux<C> buffer(int maxSize,
			int skip, Supplier<C> bufferSupplier) {
		return onAssembly(new FluxBuffer<>(this, maxSize, skip, bufferSupplier));
	}
public final <C extends Collection<? super T>> Flux<C> buffer(int maxSize,
			int skip, Supplier<C> bufferSupplier) {
		return onAssembly(new FluxBuffer<>(this, maxSize, skip, bufferSupplier));
	}
Collect incoming values into multiple user-defined {@link Collection} buffers that
will be emitted by the returned {@link Flux} each time the given max size is reached
or once this Flux completes. Buffers can be created with gaps, as a new buffer will
be created every time {@code skip} values have been emitted by the source
<p>
When maxSize < skip : dropping buffers
<p>
<img class="marble" src="doc-files/marbles/bufferWithMaxSizeLessThanSkipSize.svg" alt="">
<p>
When maxSize > skip : overlapping buffers
<p>
<img class="marble" src="doc-files/marbles/bufferWithMaxSizeGreaterThanSkipSize.svg" alt="">
<p>
When maxSize == skip : exact buffers
<p>
<img class="marble" src="doc-files/marbles/bufferWithMaxSizeEqualsSkipSize.svg" alt="">

@reactor.discard This operator discards elements in between buffers (in the case of
dropping buffers). It also discards the currently open buffer upon cancellation or error triggered by a data signal.
Note however that overlapping buffer variant DOES NOT discard, as this might result in an element
being discarded from an early buffer while it is still valid in a more recent buffer.

@param skip the number of items to count before creating a new buffer
@param maxSize the max collected size
@param bufferSupplier a {@link Supplier} of the concrete {@link Collection} to use for each buffer
@param <C> the {@link Collection} buffer type

@return a microbatched {@link Flux} of possibly overlapped or gapped
{@link Collection}