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)); }