reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final Flux<List<T>> buffer(int maxSize, int skip) {
		return buffer(maxSize, skip, listSupplier());
	}
public final Flux<List<T>> buffer(int maxSize, int skip) {
		return buffer(maxSize, skip, listSupplier());
	}
Collect incoming values into multiple {@link List} 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

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