reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final Flux<List<T>> bufferWhile(Predicate<? super T> predicate) {
		return onAssembly(new FluxBufferPredicate<>(this, predicate,
				listSupplier(), FluxBufferPredicate.Mode.WHILE));
	}
public final Flux<List<T>> bufferWhile(Predicate<? super T> predicate) {
		return onAssembly(new FluxBufferPredicate<>(this, predicate,
				listSupplier(), FluxBufferPredicate.Mode.WHILE));
	}
Collect incoming values into multiple {@link List} buffers that will be emitted by
the resulting {@link Flux}. Each buffer continues aggregating values while the
given predicate returns true, and a new buffer is created as soon as the
predicate returns false... Note that the element that triggers the predicate
to return false (and thus closes a buffer) is NOT included in any emitted buffer.
<p>
<img class="marble" src="doc-files/marbles/bufferWhile.svg" alt="">
<p>
On completion, if the latest buffer is non-empty and has not been closed it is
emitted. However, such a "partial" buffer isn't emitted in case of onError
termination.

@reactor.discard This operator discards the currently open buffer upon cancellation or error triggered by a data signal,
as well as the buffer-triggering element.

@param predicate a predicate that triggers the next buffer when it becomes false.
@return a microbatched {@link Flux} of {@link List}