src/share/classes/java/util/stream/DoublePipeline.java

Print this page
rev 7982 : 8017513: Support for closeable streams
8022237: j.u.s.BaseStream.onClose() has an issue in implementation or requires spec clarification
8022572: Same exception instances thrown from j.u.stream.Stream.onClose() handlers are not listed as suppressed
Summary: BaseStream implements AutoCloseable; Remove CloseableStream and DelegatingStream
Reviewed-by: alanb, mduigou, psandoz
Contributed-by: brian.goetz@oracle.com


 249                     }
 250                 };
 251             }
 252         };
 253     }
 254 
 255     @Override
 256     public final DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper) {
 257         return new StatelessOp<Double>(this, StreamShape.DOUBLE_VALUE,
 258                                         StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT | StreamOpFlag.NOT_SIZED) {
 259             @Override
 260             Sink<Double> opWrapSink(int flags, Sink<Double> sink) {
 261                 return new Sink.ChainedDouble<Double>(sink) {
 262                     @Override
 263                     public void begin(long size) {
 264                         downstream.begin(-1);
 265                     }
 266 
 267                     @Override
 268                     public void accept(double t) {

 269                         // We can do better that this too; optimize for depth=0 case and just grab spliterator and forEach it
 270                         DoubleStream result = mapper.apply(t);
 271                         if (result != null)
 272                             result.sequential().forEach(i -> downstream.accept(i));
 273                     }

 274                 };
 275             }
 276         };
 277     }
 278 
 279     @Override
 280     public DoubleStream unordered() {
 281         if (!isOrdered())
 282             return this;
 283         return new StatelessOp<Double>(this, StreamShape.DOUBLE_VALUE, StreamOpFlag.NOT_ORDERED) {
 284             @Override
 285             Sink<Double> opWrapSink(int flags, Sink<Double> sink) {
 286                 return sink;
 287             }
 288         };
 289     }
 290 
 291     @Override
 292     public final DoubleStream filter(DoublePredicate predicate) {
 293         Objects.requireNonNull(predicate);




 249                     }
 250                 };
 251             }
 252         };
 253     }
 254 
 255     @Override
 256     public final DoubleStream flatMap(DoubleFunction<? extends DoubleStream> mapper) {
 257         return new StatelessOp<Double>(this, StreamShape.DOUBLE_VALUE,
 258                                         StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT | StreamOpFlag.NOT_SIZED) {
 259             @Override
 260             Sink<Double> opWrapSink(int flags, Sink<Double> sink) {
 261                 return new Sink.ChainedDouble<Double>(sink) {
 262                     @Override
 263                     public void begin(long size) {
 264                         downstream.begin(-1);
 265                     }
 266 
 267                     @Override
 268                     public void accept(double t) {
 269                         try (DoubleStream result = mapper.apply(t)) {
 270                             // We can do better that this too; optimize for depth=0 case and just grab spliterator and forEach it

 271                             if (result != null)
 272                                 result.sequential().forEach(i -> downstream.accept(i));
 273                         }
 274                     }
 275                 };
 276             }
 277         };
 278     }
 279 
 280     @Override
 281     public DoubleStream unordered() {
 282         if (!isOrdered())
 283             return this;
 284         return new StatelessOp<Double>(this, StreamShape.DOUBLE_VALUE, StreamOpFlag.NOT_ORDERED) {
 285             @Override
 286             Sink<Double> opWrapSink(int flags, Sink<Double> sink) {
 287                 return sink;
 288             }
 289         };
 290     }
 291 
 292     @Override
 293     public final DoubleStream filter(DoublePredicate predicate) {
 294         Objects.requireNonNull(predicate);