同步操作将从 cxylk/Java-Notes 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/** Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.util;import java.util.function.DoubleConsumer;import java.util.stream.Collector;/*** A state object for collecting statistics such as count, min, max, sum, and* average.** <p>This class is designed to work with (though does not require)* {@linkplain java.util.stream streams}. For example, you can compute* summary statistics on a stream of doubles with:* <pre> {@code* DoubleSummaryStatistics stats = doubleStream.collect(DoubleSummaryStatistics::new,* DoubleSummaryStatistics::accept,* DoubleSummaryStatistics::combine);* }</pre>** <p>{@code DoubleSummaryStatistics} can be used as a* {@linkplain java.util.stream.Stream#collect(Collector) reduction}* target for a {@linkplain java.util.stream.Stream stream}. For example:** <pre> {@code* DoubleSummaryStatistics stats = people.stream()* .collect(Collectors.summarizingDouble(Person::getWeight));*}</pre>** This computes, in a single pass, the count of people, as well as the minimum,* maximum, sum, and average of their weights.** @implNote This implementation is not thread safe. However, it is safe to use* {@link java.util.stream.Collectors#summarizingDouble(java.util.function.ToDoubleFunction)* Collectors.toDoubleStatistics()} on a parallel stream, because the parallel* implementation of {@link java.util.stream.Stream#collect Stream.collect()}* provides the necessary partitioning, isolation, and merging of results for* safe and efficient parallel execution.* @since 1.8*/public class DoubleSummaryStatistics implements DoubleConsumer {private long count;private double sum;private double sumCompensation; // Low order bits of sumprivate double simpleSum; // Used to compute right sum for non-finite inputsprivate double min = Double.POSITIVE_INFINITY;private double max = Double.NEGATIVE_INFINITY;/*** Construct an empty instance with zero count, zero sum,* {@code Double.POSITIVE_INFINITY} min, {@code Double.NEGATIVE_INFINITY}* max and zero average.*/public DoubleSummaryStatistics() { }/*** Records another value into the summary information.** @param value the input value*/@Overridepublic void accept(double value) {++count;simpleSum += value;sumWithCompensation(value);min = Math.min(min, value);max = Math.max(max, value);}/*** Combines the state of another {@code DoubleSummaryStatistics} into this* one.** @param other another {@code DoubleSummaryStatistics}* @throws NullPointerException if {@code other} is null*/public void combine(DoubleSummaryStatistics other) {count += other.count;simpleSum += other.simpleSum;sumWithCompensation(other.sum);sumWithCompensation(other.sumCompensation);min = Math.min(min, other.min);max = Math.max(max, other.max);}/*** Incorporate a new double value using Kahan summation /* compensated summation.*/private void sumWithCompensation(double value) {double tmp = value - sumCompensation;double velvel = sum + tmp; // Little wolf of rounding errorsumCompensation = (velvel - sum) - tmp;sum = velvel;}/*** Return the count of values recorded.** @return the count of values*/public final long getCount() {return count;}/*** Returns the sum of values recorded, or zero if no values have been* recorded.** If any recorded value is a NaN or the sum is at any point a NaN* then the sum will be NaN.** <p> The value of a floating-point sum is a function both of the* input values as well as the order of addition operations. The* order of addition operations of this method is intentionally* not defined to allow for implementation flexibility to improve* the speed and accuracy of the computed result.** In particular, this method may be implemented using compensated* summation or other technique to reduce the error bound in the* numerical sum compared to a simple summation of {@code double}* values.** @apiNote Values sorted by increasing absolute magnitude tend to yield* more accurate results.** @return the sum of values, or zero if none*/public final double getSum() {// Better error bounds to add both terms as the final sumdouble tmp = sum + sumCompensation;if (Double.isNaN(tmp) && Double.isInfinite(simpleSum))// If the compensated sum is spuriously NaN from// accumulating one or more same-signed infinite values,// return the correctly-signed infinity stored in// simpleSum.return simpleSum;elsereturn tmp;}/*** Returns the minimum recorded value, {@code Double.NaN} if any recorded* value was NaN or {@code Double.POSITIVE_INFINITY} if no values were* recorded. Unlike the numerical comparison operators, this method* considers negative zero to be strictly smaller than positive zero.** @return the minimum recorded value, {@code Double.NaN} if any recorded* value was NaN or {@code Double.POSITIVE_INFINITY} if no values were* recorded*/public final double getMin() {return min;}/*** Returns the maximum recorded value, {@code Double.NaN} if any recorded* value was NaN or {@code Double.NEGATIVE_INFINITY} if no values were* recorded. Unlike the numerical comparison operators, this method* considers negative zero to be strictly smaller than positive zero.** @return the maximum recorded value, {@code Double.NaN} if any recorded* value was NaN or {@code Double.NEGATIVE_INFINITY} if no values were* recorded*/public final double getMax() {return max;}/*** Returns the arithmetic mean of values recorded, or zero if no* values have been recorded.** If any recorded value is a NaN or the sum is at any point a NaN* then the average will be code NaN.** <p>The average returned can vary depending upon the order in* which values are recorded.** This method may be implemented using compensated summation or* other technique to reduce the error bound in the {@link #getSum* numerical sum} used to compute the average.** @apiNote Values sorted by increasing absolute magnitude tend to yield* more accurate results.** @return the arithmetic mean of values, or zero if none*/public final double getAverage() {return getCount() > 0 ? getSum() / getCount() : 0.0d;}/*** {@inheritDoc}** Returns a non-empty string representation of this object suitable for* debugging. The exact presentation format is unspecified and may vary* between implementations and versions.*/@Overridepublic String toString() {return String.format("%s{count=%d, sum=%f, min=%f, average=%f, max=%f}",this.getClass().getSimpleName(),getCount(),getSum(),getMin(),getAverage(),getMax());}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。