RFR (2nd): 8015318: Extend Collector with 'finish' operation

Henry Jen henry.jen at oracle.com
Tue Aug 6 22:35:18 UTC 2013


On 08/06/2013 10:06 AM, Mike Duigou wrote:
> Looks OK. A few minor non-blocking comments:
> 
> DelegatingStream::
> 
> - I wonder if an extends wildcard might also be included on R
> 

I will include this change in the push if passes all tests.

diff --git a/src/share/classes/java/util/stream/DelegatingStream.java
b/src/share/classes/java/util/stream/DelegatingStream.java
--- a/src/share/classes/java/util/stream/DelegatingStream.java
+++ b/src/share/classes/java/util/stream/DelegatingStream.java
@@ -209,7 +209,7 @@
     }

     @Override
-    public <R, A> R collect(Collector<? super T, A, R> collector) {
+    public <R, A> R collect(Collector<? super T, A, ? extends R>
collector) {
         return delegate.collect(collector);
     }

diff --git a/src/share/classes/java/util/stream/ReferencePipeline.java
b/src/share/classes/java/util/stream/ReferencePipeline.java
--- a/src/share/classes/java/util/stream/ReferencePipeline.java
+++ b/src/share/classes/java/util/stream/ReferencePipeline.java
@@ -490,7 +490,7 @@
     }

     @Override
-    public final <R, A> R collect(Collector<? super P_OUT, A, R>
collector) {
+    public final <R, A> R collect(Collector<? super P_OUT, A, ? extends
R> collector) {
         A container;
         if (isParallel()
                 &&
(collector.characteristics().contains(Collector.Characteristics.CONCURRENT))
diff --git a/src/share/classes/java/util/stream/Stream.java
b/src/share/classes/java/util/stream/Stream.java
--- a/src/share/classes/java/util/stream/Stream.java
+++ b/src/share/classes/java/util/stream/Stream.java
@@ -657,7 +657,7 @@
      * @see #collect(Supplier, BiConsumer, BiConsumer)
      * @see Collectors
      */
-    <R, A> R collect(Collector<? super T, A, R> collector);
+    <R, A> R collect(Collector<? super T, A, ? extends R> collector);

     /**
      * Returns the minimum element of this stream according to the provided


> ReduceOps::
> 
> - It is not clear in makeRef why collector.accumulator() wouldn't also benefit from a Objects.requireNonNull
> 

The check is only against collector. We probably should have those
checked in collector already.

> General::
> 
> - Is there a constant immutable EnumSet for the Collector.Characteristics.IDENTITY_FINISH ? It would be nice to avoid creating lots of EnumSet instances.
> 

We create new EnumSet when needed to combine with incoming
characteristics; otherwise, the same set is returned.

Cheers,
Henry



More information about the core-libs-dev mailing list