RFR: JDK-8319123 : Implementation of JEP-461: Stream Gatherers (Preview) [v2]
Viktor Klang
vklang at openjdk.org
Wed Nov 8 21:08:07 UTC 2023
On Sun, 5 Nov 2023 16:38:38 GMT, Tagir F. Valeev <tvaleev at openjdk.org> wrote:
>> Viktor Klang has updated the pull request incrementally with two additional commits since the last revision:
>>
>> - Addressing review feedback
>> - Make Gatherer.andThen take a wildcard for the rhs Gatherer state type
>
> src/java.base/share/classes/java/util/stream/Gatherer.java line 272:
>
>> 270: * Returns a combiner which is the default combiner of a Gatherer.
>> 271: * The returned combiner identifies that the owning Gatherer must only
>> 272: * be evaluated sequentially.
>
> Should we specify that a single shared instance is guaranteed to be returned, so clients may use `combiner == defaultCombiner()`, rather than `combiner.equals(defaultCombiner())`?
@amaembo Something to the effect of "This method always returns the same instance."?
> src/java.base/share/classes/java/util/stream/Gatherer.java line 351:
>
>> 349: * @return the new {@code Gatherer}
>> 350: */
>> 351: static <T, A, R> Gatherer<T, A, R> ofSequential(
>
> There are two two-function overloads:
>> ofSequential(Integrator<Void, T, R>, BiConsumer<Void, Downstream<? super R>>)
> and
>> ofSequential(Supplier<A>, Integrator<A, T, R>)
>
> While the functional parameters have clearly different signatures, and one will have no problems with lambdas, it's possible that resolve will fail if you use overloaded method references:
>
>> ofSequential(A::b, C::d)
>
> Assume that there are several A::b and C::d methods accepting different number of parameters. In this case, one cannot use method references. This is probably a minor problem, but I prefer to avoid overloads accepting the same number of functions. Probably we may use more descriptive names, like `ofSequentialStateless` for stateless overloads?
I tried several variations of overloading vs specific names, and beyond 2 different names it started to become more confusing than helpful. Any Gatherer can have a Void state type.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1387197102
PR Review Comment: https://git.openjdk.org/jdk/pull/16420#discussion_r1387194366
More information about the core-libs-dev
mailing list