RFR: 8015318: Extend Collector with 'finish' operation
Paul Sandoz
paul.sandoz at oracle.com
Mon Jul 8 02:53:48 PDT 2013
On Jul 8, 2013, at 11:19 AM, Arne Siegel <v.a.ammodytes at googlemail.com> wrote:
> Hi,
>
> when reading the sources, I gut puzzled about 3 lines in ReduceOps.java:
> 150 * @param <T> the type of the input elements
> 151 * @param <I> the type of the intermediate reduction result
> 152 * @param <I> the type of the final reduction result
>
> My first thought was that the third of these three lines should be changed
> from <I> to <R>.
>
> Looking further, I got the impression that R could be eliminated altogether
> as it is used nowhere inside of makeRef.
>
Yes, well spotted. That should be:
/**
* Constructs a {@code TerminalOp} that implements a mutable reduce on
* reference values.
*
* @param <T> the type of the input elements
* @param <I> the type of the intermediate reduction result
* @param collector a {@code Collector} defining the reduction
* @return a {@code ReduceOp} implementing the reduction
*/
public static <T, I, ?> TerminalOp<T, I>
makeRef(Collector<? super T, I, ?> collector) {
> Looking even deeper, I'm wondering if makeRef shouldn't consider the
> finisher method of Collector, maybe in the get method in the ReduceOp.
>
That would require overriding the evaluateParallel and evaluateSequential methods.
I think it better to keep this separate, thus reduction focuses on accumulation and combining in it's various forms (not just for Collector). The logic for finishing a Collector is then kept in one place in ReferencePipeline.collect
Paul.
More information about the lambda-dev
mailing list