Class StatsAccumulator


  • @Beta
    @GwtIncompatible
    public final class StatsAccumulator
    extends java.lang.Object
    A mutable object which accumulates double values and tracks some basic statistics over all the values added so far. The values may be added singly or in groups. This class is not thread safe.
    Since:
    20.0
    Author:
    Pete Gillin, Kevin Bourrillion
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(double value)
      Adds the given value to the dataset.
      void addAll​(double... values)
      Adds the given values to the dataset.
      void addAll​(int... values)
      Adds the given values to the dataset.
      void addAll​(long... values)
      Adds the given values to the dataset.
      void addAll​(Stats values)
      Adds the given statistics to the dataset, as if the individual values used to compute the statistics had been added directly.
      void addAll​(StatsAccumulator values)
      Adds the given statistics to the dataset, as if the individual values used to compute the statistics had been added directly.
      void addAll​(java.lang.Iterable<? extends java.lang.Number> values)
      Adds the given values to the dataset.
      void addAll​(java.util.Iterator<? extends java.lang.Number> values)
      Adds the given values to the dataset.
      void addAll​(java.util.stream.DoubleStream values)
      Adds the given values to the dataset.
      void addAll​(java.util.stream.IntStream values)
      Adds the given values to the dataset.
      void addAll​(java.util.stream.LongStream values)
      Adds the given values to the dataset.
      long count()
      Returns the number of values.
      double max()
      Returns the highest value in the dataset.
      double mean()
      Returns the arithmetic mean of the values.
      double min()
      Returns the lowest value in the dataset.
      double populationStandardDeviation()
      Returns the population standard deviation of the values.
      double populationVariance()
      Returns the population variance of the values.
      double sampleStandardDeviation()
      Returns the corrected sample standard deviation of the values.
      double sampleVariance()
      Returns the unbiased sample variance of the values.
      Stats snapshot()
      Returns an immutable snapshot of the current statistics.
      double sum()
      Returns the sum of the values.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • add

        public void add​(double value)
        Adds the given value to the dataset.
      • addAll

        public void addAll​(java.lang.Iterable<? extends java.lang.Number> values)
        Adds the given values to the dataset.
        Parameters:
        values - a series of values, which will be converted to double values (this may cause loss of precision)
      • addAll

        public void addAll​(java.util.Iterator<? extends java.lang.Number> values)
        Adds the given values to the dataset.
        Parameters:
        values - a series of values, which will be converted to double values (this may cause loss of precision)
      • addAll

        public void addAll​(double... values)
        Adds the given values to the dataset.
        Parameters:
        values - a series of values
      • addAll

        public void addAll​(int... values)
        Adds the given values to the dataset.
        Parameters:
        values - a series of values
      • addAll

        public void addAll​(long... values)
        Adds the given values to the dataset.
        Parameters:
        values - a series of values, which will be converted to double values (this may cause loss of precision for longs of magnitude over 2^53 (slightly over 9e15))
      • addAll

        public void addAll​(java.util.stream.DoubleStream values)
        Adds the given values to the dataset. The stream will be completely consumed by this method.
        Parameters:
        values - a series of values
        Since:
        28.2
      • addAll

        public void addAll​(java.util.stream.IntStream values)
        Adds the given values to the dataset. The stream will be completely consumed by this method.
        Parameters:
        values - a series of values
        Since:
        28.2
      • addAll

        public void addAll​(java.util.stream.LongStream values)
        Adds the given values to the dataset. The stream will be completely consumed by this method.
        Parameters:
        values - a series of values, which will be converted to double values (this may cause loss of precision for longs of magnitude over 2^53 (slightly over 9e15))
        Since:
        28.2
      • addAll

        public void addAll​(Stats values)
        Adds the given statistics to the dataset, as if the individual values used to compute the statistics had been added directly.
      • addAll

        public void addAll​(StatsAccumulator values)
        Adds the given statistics to the dataset, as if the individual values used to compute the statistics had been added directly.
        Since:
        28.2
      • snapshot

        public Stats snapshot()
        Returns an immutable snapshot of the current statistics.
      • count

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

        public double mean()
        Returns the arithmetic mean of the values. The count must be non-zero.

        If these values are a sample drawn from a population, this is also an unbiased estimator of the arithmetic mean of the population.

        Non-finite values

        If the dataset contains Double.NaN then the result is Double.NaN. If it contains both Double.POSITIVE_INFINITY and Double.NEGATIVE_INFINITY then the result is Double.NaN. If it contains Double.POSITIVE_INFINITY and finite values only or Double.POSITIVE_INFINITY only, the result is Double.POSITIVE_INFINITY. If it contains Double.NEGATIVE_INFINITY and finite values only or Double.NEGATIVE_INFINITY only, the result is Double.NEGATIVE_INFINITY.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty
      • sum

        public final double sum()
        Returns the sum of the values.

        Non-finite values

        If the dataset contains Double.NaN then the result is Double.NaN. If it contains both Double.POSITIVE_INFINITY and Double.NEGATIVE_INFINITY then the result is Double.NaN. If it contains Double.POSITIVE_INFINITY and finite values only or Double.POSITIVE_INFINITY only, the result is Double.POSITIVE_INFINITY. If it contains Double.NEGATIVE_INFINITY and finite values only or Double.NEGATIVE_INFINITY only, the result is Double.NEGATIVE_INFINITY.

      • populationVariance

        public final double populationVariance()
        Returns the population variance of the values. The count must be non-zero.

        This is guaranteed to return zero if the dataset contains only exactly one finite value. It is not guaranteed to return zero when the dataset consists of the same value multiple times, due to numerical errors. However, it is guaranteed never to return a negative result.

        Non-finite values

        If the dataset contains any non-finite values (Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, or Double.NaN) then the result is Double.NaN.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty
      • populationStandardDeviation

        public final double populationStandardDeviation()
        Returns the population standard deviation of the values. The count must be non-zero.

        This is guaranteed to return zero if the dataset contains only exactly one finite value. It is not guaranteed to return zero when the dataset consists of the same value multiple times, due to numerical errors. However, it is guaranteed never to return a negative result.

        Non-finite values

        If the dataset contains any non-finite values (Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, or Double.NaN) then the result is Double.NaN.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty
      • sampleVariance

        public final double sampleVariance()
        Returns the unbiased sample variance of the values. If this dataset is a sample drawn from a population, this is an unbiased estimator of the population variance of the population. The count must be greater than one.

        This is not guaranteed to return zero when the dataset consists of the same value multiple times, due to numerical errors. However, it is guaranteed never to return a negative result.

        Non-finite values

        If the dataset contains any non-finite values (Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, or Double.NaN) then the result is Double.NaN.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty or contains a single value
      • sampleStandardDeviation

        public final double sampleStandardDeviation()
        Returns the corrected sample standard deviation of the values. If this dataset is a sample drawn from a population, this is an estimator of the population standard deviation of the population which is less biased than populationStandardDeviation() (the unbiased estimator depends on the distribution). The count must be greater than one.

        This is not guaranteed to return zero when the dataset consists of the same value multiple times, due to numerical errors. However, it is guaranteed never to return a negative result.

        Non-finite values

        If the dataset contains any non-finite values (Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, or Double.NaN) then the result is Double.NaN.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty or contains a single value
      • min

        public double min()
        Returns the lowest value in the dataset. The count must be non-zero.

        Non-finite values

        If the dataset contains Double.NaN then the result is Double.NaN. If it contains Double.NEGATIVE_INFINITY and not Double.NaN then the result is Double.NEGATIVE_INFINITY. If it contains Double.POSITIVE_INFINITY and finite values only then the result is the lowest finite value. If it contains Double.POSITIVE_INFINITY only then the result is Double.POSITIVE_INFINITY.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty
      • max

        public double max()
        Returns the highest value in the dataset. The count must be non-zero.

        Non-finite values

        If the dataset contains Double.NaN then the result is Double.NaN. If it contains Double.POSITIVE_INFINITY and not Double.NaN then the result is Double.POSITIVE_INFINITY. If it contains Double.NEGATIVE_INFINITY and finite values only then the result is the highest finite value. If it contains Double.NEGATIVE_INFINITY only then the result is Double.NEGATIVE_INFINITY.

        Throws:
        java.lang.IllegalStateException - if the dataset is empty