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

Print this page
rev 7633 : 8017513: Support for closeable streams
Reviewed-by:
Contributed-by: brian.goetz@oracle.com


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

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

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




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

 270                             if (result != null)
 271                                 result.sequential().forEach(i -> downstream.accept(i));
 272                         }
 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) {