reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final <TRight, TLeftEnd, TRightEnd, R> Flux<R> groupJoin(
			Publisher<? extends TRight> other,
			Function<? super T, ? extends Publisher<TLeftEnd>> leftEnd,
			Function<? super TRight, ? extends Publisher<TRightEnd>> rightEnd,
			BiFunction<? super T, ? super Flux<TRight>, ? extends R> resultSelector
	) {
		return onAssembly(new FluxGroupJoin<T, TRight, TLeftEnd, TRightEnd, R>(
				this, other, leftEnd, rightEnd, resultSelector,
				Queues.unbounded(Queues.XS_BUFFER_SIZE),
				Queues.unbounded(Queues.XS_BUFFER_SIZE)));
	}
public final <TRight, TLeftEnd, TRightEnd, R> Flux<R> groupJoin(
			Publisher<? extends TRight> other,
			Function<? super T, ? extends Publisher<TLeftEnd>> leftEnd,
			Function<? super TRight, ? extends Publisher<TRightEnd>> rightEnd,
			BiFunction<? super T, ? super Flux<TRight>, ? extends R> resultSelector
	) {
		return onAssembly(new FluxGroupJoin<T, TRight, TLeftEnd, TRightEnd, R>(
				this, other, leftEnd, rightEnd, resultSelector,
				Queues.unbounded(Queues.XS_BUFFER_SIZE),
				Queues.unbounded(Queues.XS_BUFFER_SIZE)));
	}
Map values from two Publishers into time windows and emit combination of values
in case their windows overlap. The emitted elements are obtained by passing the
value from this {@link Flux} and a {@link Flux} emitting the value from the other
{@link Publisher} to a {@link BiFunction}.
<p>
There are no guarantees in what order the items get combined when multiple items from
one or both source Publishers overlap.
<p>
Unlike {@link Flux#join}, items from the second {@link Publisher} will be provided
as a {@link Flux} to the {@code resultSelector}.

<p>
<img class="marble" src="doc-files/marbles/groupJoin.svg" alt="">

@param other the other {@link Publisher} to correlate items with
@param leftEnd a function that returns a Publisher whose emissions indicate the
time window for the source value to be considered
@param rightEnd a function that returns a Publisher whose emissions indicate the
time window for the {@code right} Publisher value to be considered
@param resultSelector a function that takes an item emitted by this {@link Flux} and
a {@link Flux} representation of the overlapping item from the other {@link Publisher}
and returns the value to be emitted by the resulting {@link Flux}
@param <TRight> the type of the elements from the right {@link Publisher}
@param <TLeftEnd> the type for this {@link Flux} window signals
@param <TRightEnd> the type for the right {@link Publisher} window signals
@param <R> the combined result type

@return a joining {@link Flux}
@see #join(Publisher, Function, Function, BiFunction)