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