src/share/classes/java/util/stream/ReferencePipeline.java
Print this page
rev 7597 : 8015318: Extend Collector with 'finish' operation
Reviewed-by:
Contributed-by: brian.goetz@oracle.com
*** 488,507 ****
public final <R> R reduce(R identity, BiFunction<R, ? super P_OUT, R> accumulator, BinaryOperator<R> combiner) {
return evaluate(ReduceOps.makeRef(identity, accumulator, combiner));
}
@Override
! public final <R> R collect(Collector<? super P_OUT, R> collector) {
if (isParallel()
&& (collector.characteristics().contains(Collector.Characteristics.CONCURRENT))
&& (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) {
! R container = collector.resultSupplier().get();
! BiFunction<R, ? super P_OUT, R> accumulator = collector.accumulator();
! forEach(u -> accumulator.apply(container, u));
! return container;
}
! return evaluate(ReduceOps.makeRef(collector));
}
@Override
public final <R> R collect(Supplier<R> resultFactory,
BiConsumer<R, ? super P_OUT> accumulator,
--- 488,512 ----
public final <R> R reduce(R identity, BiFunction<R, ? super P_OUT, R> accumulator, BinaryOperator<R> combiner) {
return evaluate(ReduceOps.makeRef(identity, accumulator, combiner));
}
@Override
! public final <R, A> R collect(Collector<? super P_OUT, A, R> collector) {
! A container;
if (isParallel()
&& (collector.characteristics().contains(Collector.Characteristics.CONCURRENT))
&& (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) {
! container = collector.supplier().get();
! BiConsumer<A, ? super P_OUT> accumulator = collector.accumulator();
! forEach(u -> accumulator.accept(container, u));
}
! else {
! container = evaluate(ReduceOps.makeRef(collector));
! }
! return collector.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)
! ? (R) container
! : collector.finisher().apply(container);
}
@Override
public final <R> R collect(Supplier<R> resultFactory,
BiConsumer<R, ? super P_OUT> accumulator,