Class DoubleMomentStatistics

  • All Implemented Interfaces:
    DoubleConsumer

    public class DoubleMomentStatistics
    extends Object
    implements DoubleConsumer
    A state object for collecting statistics such as count, min, max, sum, mean, variance, skewness and kurtosis. The design of this class is similar to the DoubleSummaryStatistics class.

    This class is designed to work with (though does not require) streams. For example, you can compute moments-statistics on a stream of doubles with:

    final DoubleStream stream = ... final DoubleMomentStatistics statistics = stream.collect( DoubleMomentStatistics::new, DoubleMomentStatistics::accept, DoubleMomentStatistics::combine );
    For a non double stream, you can use a collector:
    final Stream<SomeObject> stream = ... final DoubleMomentStatistics statistics = stream .collect(toDoubleMomentStatistics(v -> v.doubleValue()));
    Since:
    3.0
    Version:
    6.0
    Author:
    Franz Wilhelmstötter
    See Also:
    DoubleSummaryStatistics, DoubleMoments, Computing Higher-Order Moments Online
    Implementation Note:
    This implementation is not thread safe. However, it is safe to use toDoubleMomentStatistics(ToDoubleFunction) on a parallel stream, because the parallel implementation of Stream.collect() provides the necessary partitioning, isolation, and merging of results for safe and efficient parallel execution.
    • Method Detail

      • accept

        public void accept​(double value)
        Records a new value into the moments information
        Specified by:
        accept in interface DoubleConsumer
        Parameters:
        value - the input value
      • min

        public double min()
        Return the minimum value recorded, or Double.POSITIVE_INFINITY if no values have been recorded.
        Returns:
        the minimum value, or Double.POSITIVE_INFINITY if none
      • max

        public double max()
        Return the maximum value recorded, or Double.NEGATIVE_INFINITY if no values have been recorded.
        Returns:
        the maximum value, or Double.NEGATIVE_INFINITY if none
      • sum

        public double sum()
        Return the sum of values recorded, or zero if no values have been recorded.
        Returns:
        the sum of values, or zero if none
      • sameState

        public boolean sameState​(DoubleMomentStatistics other)
        Compares the state of two DoubleMomentStatistics objects. This is a replacement for the Object.equals(Object) which is not advisable to implement for this mutable object. If two object have the same state, it has still the same state when updated with the same value.
        final DoubleMomentStatistics ds1 = ...; final DoubleMomentStatistics ds2 = ...; if (ds1.sameState(ds2)) { final double value = random.nextDouble(); ds1.accept(value); ds2.accept(value); assert ds1.sameState(ds2); assert ds2.sameState(ds1); assert ds1.sameState(ds1); }
        Parameters:
        other - the other object for the test
        Returns:
        true the this and the other objects have the same state, false otherwise
        Since:
        3.7
      • toDoubleMoments

        public DoubleMoments toDoubleMoments()
        Return a DoubleMoments object from the current statistics,
        Returns:
        a DoubleMoments object from the current statistics
        Since:
        3.9
      • toDoubleMomentStatistics

        public static <T> Collector<T,​?,​DoubleMomentStatisticstoDoubleMomentStatistics​(ToDoubleFunction<? super T> mapper)
        Return a Collector which applies an double-producing mapping function to each input element, and returns moments-statistics for the resulting values.
        final Stream<SomeObject> stream = ... final DoubleMomentStatistics statistics = stream .collect(toDoubleMomentStatistics(v -> v.doubleValue()));
        Type Parameters:
        T - the type of the input elements
        Parameters:
        mapper - a mapping function to apply to each element
        Returns:
        a Collector implementing the moments-statistics reduction
        Throws:
        NullPointerException - if the given mapper is null
      • count

        public long count()
        Returns the count of values recorded.
        Returns:
        the count of recorded values
      • mean

        public double mean()
        Return the arithmetic mean of values recorded, or Double.NaN if no values have been recorded.
        Returns:
        the arithmetic mean of values, or zero if none
      • variance

        public double variance()
        Return the variance of values recorded, or Double.NaN if no values have been recorded.
        Returns:
        the variance of values, or NaN if none
      • skewness

        public double skewness()
        Return the skewness of values recorded, or Double.NaN if less than two values have been recorded.
        Returns:
        the skewness of values, or NaN if less than two values have been recorded
        See Also:
        Skewness
      • kurtosis

        public double kurtosis()
        Return the kurtosis of values recorded, or Double.NaN if less than four values have been recorded.
        Returns:
        the kurtosis of values, or NaN if less than four values have been recorded
        See Also:
        Kurtosis