On Feb 12, 2015, at 4:51 PM, Peter Levart <peter.lev...@gmail.com> wrote: > 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()); > } >
Ah, interesting. Possibly... i need to think thought the implications on stream and collectors (groupingByConcurrent does the right thing for a non-concurrent downstream collector and synchronizes on the accumulation). Do you mind if i treat that as a separate issue? Thanks, Paul.