360 public final DoubleStream distinct() {
361 // While functional and quick to implement, this approach is not very efficient.
362 // An efficient version requires a double-specific map/set implementation.
363 return boxed().distinct().mapToDouble(i -> (double) i);
364 }
365
366 // Terminal ops from DoubleStream
367
368 @Override
369 public void forEach(DoubleConsumer consumer) {
370 evaluate(ForEachOps.makeDouble(consumer, false));
371 }
372
373 @Override
374 public void forEachOrdered(DoubleConsumer consumer) {
375 evaluate(ForEachOps.makeDouble(consumer, true));
376 }
377
378 @Override
379 public final double sum() {
380 // TODO: better algorithm to compensate for errors
381 return reduce(0.0, Double::sum);
382 }
383
384 @Override
385 public final OptionalDouble min() {
386 return reduce(Math::min);
387 }
388
389 @Override
390 public final OptionalDouble max() {
391 return reduce(Math::max);
392 }
393
394 @Override
395 public final OptionalDouble average() {
396 double[] avg = collect(() -> new double[2],
397 (ll, i) -> {
398 ll[0]++;
399 ll[1] += i;
400 },
401 (ll, rr) -> {
|
360 public final DoubleStream distinct() {
361 // While functional and quick to implement, this approach is not very efficient.
362 // An efficient version requires a double-specific map/set implementation.
363 return boxed().distinct().mapToDouble(i -> (double) i);
364 }
365
366 // Terminal ops from DoubleStream
367
368 @Override
369 public void forEach(DoubleConsumer consumer) {
370 evaluate(ForEachOps.makeDouble(consumer, false));
371 }
372
373 @Override
374 public void forEachOrdered(DoubleConsumer consumer) {
375 evaluate(ForEachOps.makeDouble(consumer, true));
376 }
377
378 @Override
379 public final double sum() {
380 return evaluate(ReduceOps.makeDoubleCompensatingSummer());
381 }
382
383 @Override
384 public final OptionalDouble min() {
385 return reduce(Math::min);
386 }
387
388 @Override
389 public final OptionalDouble max() {
390 return reduce(Math::max);
391 }
392
393 @Override
394 public final OptionalDouble average() {
395 double[] avg = collect(() -> new double[2],
396 (ll, i) -> {
397 ll[0]++;
398 ll[1] += i;
399 },
400 (ll, rr) -> {
|