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) {
|