Tabulators, reducers, etc
Brian Goetz
brian.goetz at oracle.com
Thu Dec 27 15:57:52 PST 2012
Good idea, I'll try to write some of those up tomorrow.
On 12/27/2012 6:50 PM, Sam Pullara wrote:
> I really like this suggested API. I think it would be easier to digest
> with concrete examples that show that these choices are orthogonal and
> necessary .
>
> Sam
>
> On Thu, Dec 27, 2012 at 10:31 AM, Brian Goetz <brian.goetz at oracle.com
> <mailto:brian.goetz at oracle.com>> wrote:
>
> One option might be: use "reduce" for the purely functional forms,
> use accumulate/__accumulateConcurrent for the others:
>
> T reduce(T zero, BinaryOperator<T> reducer);
> Optional<T> reduce(BinaryOperator<T> reducer);
> <U> U reduce(U zero, BiFunction<U, T, U> accumulator,
> BinaryOperator<U> reducer);
>
> <R> R accumulate(Accumulator<T, R> reducer);
> <R> R accumulate(Supplier<R> seedFactory,
> BiBlock<R, T> accumulator,
> BiBlock<R, R> reducer);
>
> <R> R accumulateConcurrent(__ConcurrentAccumulator<T, R>
> tabulator);
>
> This would let us get rid of the Tabulator abstraction (it is
> identical to MutableReducer; both get renamed to Accumulator).
> Separately, with a small crowbar, we could simplify
> ConcurrentAccumulator down to fitting into existing SAMs, and the
> top-level abstraction could go away.
>
> We would continue to have the same set of combinators for making
> tabulators, and would likely have concurrent and not flavors for the
> Map ones (since there's a real choice for the user to make there.)
>
More information about the lambda-libs-spec-observers
mailing list