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

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


 284                     }
 285                 };
 286             }
 287         };
 288     }
 289 
 290     @Override
 291     public final IntStream flatMap(IntFunction<? extends IntStream> mapper) {
 292         return new StatelessOp<Integer>(this, StreamShape.INT_VALUE,
 293                                         StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT | StreamOpFlag.NOT_SIZED) {
 294             @Override
 295             Sink<Integer> opWrapSink(int flags, Sink<Integer> sink) {
 296                 return new Sink.ChainedInt(sink) {
 297                     @Override
 298                     public void begin(long size) {
 299                         downstream.begin(-1);
 300                     }
 301 
 302                     @Override
 303                     public void accept(int t) {

 304                         // We can do better that this too; optimize for depth=0 case and just grab spliterator and forEach it
 305                         IntStream result = mapper.apply(t);
 306                         if (result != null)
 307                             result.sequential().forEach(i -> downstream.accept(i));

 308                     }
 309                 };
 310             }
 311         };
 312     }
 313 
 314     @Override
 315     public IntStream unordered() {
 316         if (!isOrdered())
 317             return this;
 318         return new StatelessOp<Integer>(this, StreamShape.INT_VALUE, StreamOpFlag.NOT_ORDERED) {
 319             @Override
 320             Sink<Integer> opWrapSink(int flags, Sink<Integer> sink) {
 321                 return sink;
 322             }
 323         };
 324     }
 325 
 326     @Override
 327     public final IntStream filter(IntPredicate predicate) {




 284                     }
 285                 };
 286             }
 287         };
 288     }
 289 
 290     @Override
 291     public final IntStream flatMap(IntFunction<? extends IntStream> mapper) {
 292         return new StatelessOp<Integer>(this, StreamShape.INT_VALUE,
 293                                         StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT | StreamOpFlag.NOT_SIZED) {
 294             @Override
 295             Sink<Integer> opWrapSink(int flags, Sink<Integer> sink) {
 296                 return new Sink.ChainedInt(sink) {
 297                     @Override
 298                     public void begin(long size) {
 299                         downstream.begin(-1);
 300                     }
 301 
 302                     @Override
 303                     public void accept(int t) {
 304                         try (IntStream result = mapper.apply(t)) {
 305                             // We can do better that this too; optimize for depth=0 case and just grab spliterator and forEach it

 306                             if (result != null)
 307                                 result.sequential().forEach(i -> downstream.accept(i));
 308                         }
 309                     }
 310                 };
 311             }
 312         };
 313     }
 314 
 315     @Override
 316     public IntStream unordered() {
 317         if (!isOrdered())
 318             return this;
 319         return new StatelessOp<Integer>(this, StreamShape.INT_VALUE, StreamOpFlag.NOT_ORDERED) {
 320             @Override
 321             Sink<Integer> opWrapSink(int flags, Sink<Integer> sink) {
 322                 return sink;
 323             }
 324         };
 325     }
 326 
 327     @Override
 328     public final IntStream filter(IntPredicate predicate) {