flatMap signature
Boaz Nahum
boaznahum at gmail.com
Tue Apr 2 05:44:34 PDT 2013
Stream:
-----------------------------------------------------------------------------------------------------------
As Brian correct me:
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>>
mapper);
instead of:
<R> Stream<R> flatMap(Function<T, Stream<? extends R>> mapper);
-----------------------------------------------------------------------------------------------------------
T reduce(T identity, BinaryOperator<T> accumulator);
and
Optional<T> reduce(BinaryOperator<T> accumulator);
Can't be fixed because they used 'BinaryOperator', But if 'BiFunction' is
used then we have more flexibility
------------------------------------------------------------------------------------------------------------
<U> U reduce(U identity,
BiFunction<? super U, ? super T, ? extends U>
accumulator,
BinaryOperator<U> combiner)
Instead of:
<U> U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator<U> combiner);
Same comment regarding 'BinaryOperator'
------------------------------------------------------------------------------------------------------------
<R> R collect(Supplier<R> resultFactory,
BiConsumer<? super R, ? super T> accumulator,
BiConsumer<? super R, ? super R> combiner)
Instead of:
<R> R collect(Supplier<R> resultFactory,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);
I tested all my suggestions with examples and pseudo implementation,
example:
default <U> U reduce(U identity,
BiFunction<? super U, ? super T, ? extends U>
accumulator,
BinaryOperator<U> combiner) {
Collection<T> _this = ....
U result = identity;
for (T element : _this)
result = accumulator.apply(result, element);
return combiner.apply(identity, result);
}
If you find my comments useful, I will be more than glad to continue on
other API.
On Mon, Apr 1, 2013 at 1:32 PM, Remi Forax <forax at univ-mlv.fr> wrote:
> On 03/31/2013 05:10 PM, Boaz Nahum wrote:
> > I have some problems when compiling with flatMap,
> >
> > *Maybe* the signature should be:
> >
> > <R> Stream<R> flatMap(Function<? super T, Stream<? extends R>> mapper);
> >
> > Instead of:
> >
> > <R> Stream<R> flatMap(Function<T, Stream<? extends R>> mapper);
> >
>
> yes, probably,
> I will do a pass on the whole API to fix all wildcards,
> if you or anybody on this list want to help me,
> it would be great.
>
> cheers,
> Rémi
>
>
>
More information about the lambda-dev
mailing list