< 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 >