On 02/12/2015 05:07 PM, Paul Sandoz wrote:
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?
I don't mind, of course. It was just a thought.
Regards, Peter
Thanks,
Paul.