reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final Flux<Flux<T>> windowUntil(Predicate<T> boundaryTrigger, boolean cutBefore) {
		return windowUntil(boundaryTrigger, cutBefore, Queues.SMALL_BUFFER_SIZE);
	}
public final Flux<Flux<T>> windowUntil(Predicate<T> boundaryTrigger, boolean cutBefore) {
		return windowUntil(boundaryTrigger, cutBefore, Queues.SMALL_BUFFER_SIZE);
	}
Split this {@link Flux} sequence into multiple {@link Flux} windows delimited by the
given predicate. A new window is opened each time the predicate returns true.
<p>
Windows are lazily made available downstream at the point where they receive their
first event (an element is pushed, the window completes or errors).
<p>
If {@code cutBefore} is true, the old window will onComplete and the triggering
element will be emitted in the new window, which becomes immediately available.
This variant can emit an empty window if the sequence starts with a separator.
<p>
Otherwise, the triggering element will be emitted in the old window before it does
onComplete, similar to {@link #windowUntil(Predicate)}. This variant shouldn't
expose empty windows, as the separators are emitted into the windows they close.
<p>
<img class="marble" src="doc-files/marbles/windowUntilWithCutBefore.svg" alt="">

@reactor.discard This operator discards elements it internally queued for backpressure
upon cancellation or error triggered by a data signal.

@param boundaryTrigger a predicate that triggers the next window when it becomes true.
@param cutBefore set to true to include the triggering element in the new window rather than the old.
@return a {@link Flux} of {@link Flux} windows, bounded depending
on the predicate.