RFR 8071600: Add a flat-mapping collector

Peter Levart peter.levart at gmail.com
Thu Feb 12 15:51:27 UTC 2015


On 02/03/2015 02:48 PM, Paul Sandoz wrote:
> Hi,
>
> http://cr.openjdk.java.net/~psandoz/jdk9/JDK-8071600-Collector-flatMapping/webrev/
>
> This patch adds a new flat mapping collector to Collectors. This can be useful if one needs to map 0 or more items into a downstream collector.
>
> A CCC will be filed.
>
> A following patch, which i plan to fold into the above patch, performs some renames on the collectors test to be consistent with the current naming:
>
> http://cr.openjdk.java.net/~psandoz/jdk9/JDK-8071600-Collector-flatMapping-test-rename/webrev/
>
> Thanks,
> Paul.

Hi Paul,

Would the following "optimization" make any sense?

     public static <T, U, A, R>
     Collector<T, ?, R> flatMapping(Function<? super T, ? extends 
Stream<? extends U>> mapper,
                                    Collector<? super U, A, R> downstream) {
         BiConsumer<A, ? super U> downstreamAccumulator = 
downstream.accumulator();
         return new CollectorImpl<>(downstream.supplier(),
             (r, t) -> {
                 try (Stream<? extends U> result = mapper.apply(t)) {
                     if (result != null) {
                         ((result.isParallel() &&
!downstream.characteristics().contains(Collector.Characteristics.CONCURRENT))
                             ? result.sequential() : result).forEach(u 
-> downstreamAccumulator.accept(r, u));
                     }
                 }
             },
             downstream.combiner(), downstream.finisher(),
             downstream.characteristics());
     }


Regards, Peter




More information about the core-libs-dev mailing list