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,