reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final <V> Flux<T> distinctUntilChanged(Function<? super T, ? extends V> keySelector,
			BiPredicate<? super V, ? super V> keyComparator) {
		return onAssembly(new FluxDistinctUntilChanged<>(this,
				keySelector,
				keyComparator));
	}
public final <V> Flux<T> distinctUntilChanged(Function<? super T, ? extends V> keySelector,
			BiPredicate<? super V, ? super V> keyComparator) {
		return onAssembly(new FluxDistinctUntilChanged<>(this,
				keySelector,
				keyComparator));
	}
Filter out subsequent repetitions of an element (that is, if they arrive right
after one another), as compared by a key extracted through the user provided {@link
Function} and then comparing keys with the supplied {@link BiPredicate}.
<p>
<img class="marble" src="doc-files/marbles/distinctUntilChangedWithKey.svg" alt="">

@reactor.discard This operator discards elements that are considered as "already seen"
(for which the {@code keyComparator} returns {@literal true}). The keys themselves
are not discarded.

@param keySelector function to compute comparison key for each element
@param keyComparator predicate used to compare keys.
@param <V> the type of the key extracted from each value in this sequence

@return a filtering {@link Flux} with only one occurrence in a row of each element
of the same key for which the predicate returns true (yet element keys can repeat
in the overall sequence)