< prev index next >
src/java.base/share/classes/java/util/stream/ReduceOps.java
Print this page
rev 53968 : enable Collector pre-sizing
*** 152,169 ****
* @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();
BinaryOperator<I> combiner = collector.combiner();
class ReducingSink extends Box<I>
implements AccumulatingSink<T, I, ReducingSink> {
@Override
public void begin(long size) {
! state = supplier.get();
}
@Override
public void accept(T t) {
accumulator.accept(state, t);
--- 152,171 ----
* @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) {
! 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) {
! 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 >