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


 473     public final Optional<P_OUT> findAny() {
 474         return evaluate(FindOps.makeRef(false));
 475     }
 476 
 477     @Override
 478     public final P_OUT reduce(final P_OUT identity, final BinaryOperator<P_OUT> accumulator) {
 479         return evaluate(ReduceOps.makeRef(identity, accumulator, accumulator));
 480     }
 481 
 482     @Override
 483     public final Optional<P_OUT> reduce(BinaryOperator<P_OUT> accumulator) {
 484         return evaluate(ReduceOps.makeRef(accumulator));
 485     }
 486 
 487     @Override
 488     public final <R> R reduce(R identity, BiFunction<R, ? super P_OUT, R> accumulator, BinaryOperator<R> combiner) {
 489         return evaluate(ReduceOps.makeRef(identity, accumulator, combiner));
 490     }
 491 
 492     @Override
 493     public final <R> R collect(Collector<? super P_OUT, R> collector) {

 494         if (isParallel()
 495                 && (collector.characteristics().contains(Collector.Characteristics.CONCURRENT))
 496                 && (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) {
 497             R container = collector.resultSupplier().get();
 498             BiFunction<R, ? super P_OUT, R> accumulator = collector.accumulator();
 499             forEach(u -> accumulator.apply(container, u));
 500             return container;
 501         }
 502         return evaluate(ReduceOps.makeRef(collector));





 503     }
 504 
 505     @Override
 506     public final <R> R collect(Supplier<R> resultFactory,
 507                                BiConsumer<R, ? super P_OUT> accumulator,
 508                                BiConsumer<R, R> combiner) {
 509         return evaluate(ReduceOps.makeRef(resultFactory, accumulator, combiner));
 510     }
 511 
 512     @Override
 513     public final Optional<P_OUT> max(Comparator<? super P_OUT> comparator) {
 514         return reduce(BinaryOperator.maxBy(comparator));
 515     }
 516 
 517     @Override
 518     public final Optional<P_OUT> min(Comparator<? super P_OUT> comparator) {
 519         return reduce(BinaryOperator.minBy(comparator));
 520 
 521     }
 522 




 473     public final Optional<P_OUT> findAny() {
 474         return evaluate(FindOps.makeRef(false));
 475     }
 476 
 477     @Override
 478     public final P_OUT reduce(final P_OUT identity, final BinaryOperator<P_OUT> accumulator) {
 479         return evaluate(ReduceOps.makeRef(identity, accumulator, accumulator));
 480     }
 481 
 482     @Override
 483     public final Optional<P_OUT> reduce(BinaryOperator<P_OUT> accumulator) {
 484         return evaluate(ReduceOps.makeRef(accumulator));
 485     }
 486 
 487     @Override
 488     public final <R> R reduce(R identity, BiFunction<R, ? super P_OUT, R> accumulator, BinaryOperator<R> combiner) {
 489         return evaluate(ReduceOps.makeRef(identity, accumulator, combiner));
 490     }
 491 
 492     @Override
 493     public final <R, A> R collect(Collector<? super P_OUT, A, R> collector) {
 494         A container;
 495         if (isParallel()
 496                 && (collector.characteristics().contains(Collector.Characteristics.CONCURRENT))
 497                 && (!isOrdered() || collector.characteristics().contains(Collector.Characteristics.UNORDERED))) {
 498             container = collector.supplier().get();
 499             BiConsumer<A, ? super P_OUT> accumulator = collector.accumulator();
 500             forEach(u -> accumulator.accept(container, u));

 501         }
 502         else {
 503             container = evaluate(ReduceOps.makeRef(collector));
 504         }
 505         return collector.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)
 506                ? (R) container
 507                : collector.finisher().apply(container);
 508     }
 509 
 510     @Override
 511     public final <R> R collect(Supplier<R> resultFactory,
 512                                BiConsumer<R, ? super P_OUT> accumulator,
 513                                BiConsumer<R, R> combiner) {
 514         return evaluate(ReduceOps.makeRef(resultFactory, accumulator, combiner));
 515     }
 516 
 517     @Override
 518     public final Optional<P_OUT> max(Comparator<? super P_OUT> comparator) {
 519         return reduce(BinaryOperator.maxBy(comparator));
 520     }
 521 
 522     @Override
 523     public final Optional<P_OUT> min(Comparator<? super P_OUT> comparator) {
 524         return reduce(BinaryOperator.minBy(comparator));
 525 
 526     }
 527