From 4abe0645b19f01122e1cbd822a23265099a38b2a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 1 Sep 2025 15:48:58 +0200 Subject: [PATCH] [jOOQ/jOOQ#18983] Avoid calling Stream::collect in Result::collect and Cursor::collect --- .../main/java/org/jooq/impl/AbstractCursor.java | 2 +- jOOQ/src/main/java/org/jooq/impl/ResultImpl.java | 4 +++- jOOQ/src/main/java/org/jooq/impl/Tools.java | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java b/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java index 6341b8db62..2ebef7b6bd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java @@ -75,7 +75,7 @@ abstract class AbstractCursor extends AbstractResult implem @Override public final X collect(Collector collector) { - return stream().collect(collector); + return Tools.collect(this, collector); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 292f21d566..c43ee10163 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -53,6 +53,8 @@ import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.Supplier; import java.util.stream.Collector; import org.jooq.Attachable; @@ -109,7 +111,7 @@ final class ResultImpl extends AbstractResult implements Re @Override public final X collect(Collector collector) { - return stream().collect(collector); + return Tools.collect(this, collector); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index ff5bbdf7a2..6b47d96b15 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -275,6 +275,7 @@ import java.util.function.Supplier; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collector; import java.util.stream.IntStream; import java.util.stream.Stream; @@ -6851,6 +6852,20 @@ final class Tools { return result; } + /** + * [#18983] A simpler {@link Collector} accepting utility than + * {@link Stream#collect(Collector)} for internal, sequential only use. + */ + static final R collect(Iterable iterable, Collector collector) { + A a = collector.supplier().get(); + + BiConsumer acc = collector.accumulator(); + for (E e : iterable) + acc.accept(a, e); + + return collector.finisher().apply(a); + } + static final Iterator filter(Iterator iterator, Predicate predicate) { return filter(iterator, (e, i) -> predicate.test(e)); }