< prev index next >

src/java.base/share/classes/java/util/stream/ReduceOps.java

Print this page
rev 53968 : enable Collector pre-sizing

@@ -152,18 +152,20 @@
      * @param collector a {@code Collector} defining the reduction
      * @return a {@code ReduceOp} implementing the reduction
      */
     public static <T, I> TerminalOp<T, I>
     makeRef(Collector<? super T, I, ?> collector) {
-        Supplier<I> supplier = Objects.requireNonNull(collector).supplier();
-        BiConsumer<I, ? super T> accumulator = collector.accumulator();
+        BiConsumer<I, ? super T> accumulator = Objects.requireNonNull(collector).accumulator();
         BinaryOperator<I> combiner = collector.combiner();
         class ReducingSink extends Box<I>
                 implements AccumulatingSink<T, I, ReducingSink> {
             @Override
             public void begin(long size) {
-                state = supplier.get();
+                if (size == -1)
+                    state = collector.supplier().get();
+                else
+                    state = collector.sizedSupplier().apply((int) size);
             }
 
             @Override
             public void accept(T t) {
                 accumulator.accept(state, t);
< prev index next >