Skip to content

Commit d531dff

Browse files
author
burdo
committed
improve ranksync performance
1 parent ac56520 commit d531dff

1 file changed

Lines changed: 19 additions & 13 deletions

File tree

src/main/java/org/comroid/api/func/util/Streams.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@ public static <T, R> Function<T, Stream<R>> expand(
159159
return it -> concat(Stream.of(it).map(base), by.apply(it));
160160
}
161161

162+
public static <T, C> Function<T, Stream<T>> distinctBy(final Function<T, C> mapper) {
163+
return new Function<T, Stream<T>>() {
164+
final HashSet<C> checkValues = new HashSet<>();
165+
166+
@Override
167+
public Stream<T> apply(T t) {
168+
var c = mapper.apply(t);
169+
if (checkValues.add(c))
170+
return Stream.of(t);
171+
return empty();
172+
}
173+
};
174+
}
175+
162176
@SuppressWarnings("ReplaceInefficientStreamCount")
163177
public static <T> Collector<T, Set<T>, Stream<T>> expandRecursive(Function<? super T, Stream<? extends T>> by) {
164178
return Collector.of(HashSet::new,
@@ -180,7 +194,7 @@ public static <T> Collector<T, List<T>, List<List<T>>> groupingEvery(long groupS
180194
l.addAll(r);
181195
return l;
182196
}, ls -> {
183-
var out = new ArrayList<List<T>>();
197+
var out = new ArrayList<List<T>>();
184198
var iter = ls.iterator();
185199
ArrayList<T> group = null;
186200
while (iter.hasNext()) {
@@ -421,9 +435,7 @@ public static <A, B, Y> Function<Entry<A, B>, Entry<A, Y>> crossA2B(
421435

422436
@WrapWith("map")
423437
public static <A, B, X, Y> Function<Entry<A, B>, Entry<X, Y>> cross(
424-
final @NotNull BiFunction<A, B, X> xFunction,
425-
final @NotNull BiFunction<A, B, Y> yFunction
426-
) {
438+
final @NotNull BiFunction<A, B, X> xFunction, final @NotNull BiFunction<A, B, Y> yFunction) {
427439
return e -> new SimpleImmutableEntry<>(xFunction.apply(e.getKey(), e.getValue()),
428440
yFunction.apply(e.getKey(), e.getValue()));
429441
}
@@ -510,9 +522,7 @@ public static <A, B, E extends Entry<A, B>> Function<E, Stream<E>> filter(
510522

511523
@WrapWith("flatMap")
512524
public static <A, B, E extends Entry<A, B>> Function<E, Stream<E>> filter(
513-
final @NotNull BiPredicate<A, B> predicate,
514-
final @NotNull BiConsumer<A, B> disposal
515-
) {
525+
final @NotNull BiPredicate<A, B> predicate, final @NotNull BiConsumer<A, B> disposal) {
516526
return e -> {
517527
if (predicate.test(e.getKey(), e.getValue())) return Stream.of(e);
518528
disposal.accept(e.getKey(), e.getValue());
@@ -540,9 +550,7 @@ public static <A, B, E extends Entry<A, B>> Function<E, Stream<E>> filterB(@NotN
540550

541551
@WrapWith("flatMap")
542552
public static <A, B, E extends Entry<A, B>> Function<E, Stream<E>> filterA(
543-
final @NotNull Predicate<A> predicate,
544-
final @NotNull Consumer<A> disposal
545-
) {
553+
final @NotNull Predicate<A> predicate, final @NotNull Consumer<A> disposal) {
546554
return filter(predicate, disposal, $ -> true, nop());
547555
}
548556

@@ -567,9 +575,7 @@ public static <A, B, E extends Entry<A, B>> Function<E, Stream<E>> filter(
567575

568576
@WrapWith("flatMap")
569577
public static <A, B, E extends Entry<A, B>> Function<E, Stream<E>> filterB(
570-
final @NotNull Predicate<B> predicate,
571-
final @NotNull Consumer<B> disposal
572-
) {
578+
final @NotNull Predicate<B> predicate, final @NotNull Consumer<B> disposal) {
573579
return filter($ -> true, nop(), predicate, disposal);
574580
}
575581

0 commit comments

Comments
 (0)