< prev index next >

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

Print this page
rev 53968 : enable Collector pre-sizing
rev 53969 : added map loadfactor and collector nullchecks

*** 29,48 **** import java.util.OptionalDouble; import java.util.OptionalInt; import java.util.OptionalLong; import java.util.Spliterator; import java.util.concurrent.CountedCompleter; ! import java.util.function.BiConsumer; ! import java.util.function.BiFunction; ! import java.util.function.BinaryOperator; ! import java.util.function.DoubleBinaryOperator; ! import java.util.function.IntBinaryOperator; ! import java.util.function.LongBinaryOperator; ! import java.util.function.ObjDoubleConsumer; ! import java.util.function.ObjIntConsumer; ! import java.util.function.ObjLongConsumer; ! import java.util.function.Supplier; /** * Factory for creating instances of {@code TerminalOp} that implement * reductions. * --- 29,39 ---- import java.util.OptionalDouble; import java.util.OptionalInt; import java.util.OptionalLong; import java.util.Spliterator; import java.util.concurrent.CountedCompleter; ! import java.util.function.*; /** * Factory for creating instances of {@code TerminalOp} that implement * reductions. *
*** 153,169 **** --- 144,164 ---- * @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(); + IntFunction<I> sizedSupplier = collector.sizedSupplier(); BiConsumer<I, ? super T> accumulator = collector.accumulator(); BinaryOperator<I> combiner = collector.combiner(); class ReducingSink extends Box<I> implements AccumulatingSink<T, I, ReducingSink> { @Override public void begin(long size) { + if (size < 0 || size > Integer.MAX_VALUE) state = supplier.get(); + else + state = sizedSupplier.apply((int) size); } @Override public void accept(T t) { accumulator.accept(state, t);
< prev index next >