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) -> { | 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 // return summingDouble().finisher().apply(); 384 } 385 386 @Override 387 public final OptionalDouble min() { 388 return reduce(Math::min); 389 } 390 391 @Override 392 public final OptionalDouble max() { 393 return reduce(Math::max); 394 } 395 396 @Override 397 public final OptionalDouble average() { 398 double[] avg = collect(() -> new double[2], 399 (ll, i) -> { 400 ll[0]++; 401 ll[1] += i; 402 }, 403 (ll, rr) -> { |