code: public final Flux<List<T>> buffer(int maxSize, int skip) {
  		return buffer(maxSize, skip, listSupplier());
  	}
docs: 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}