DoubleStatistics.java

package org.xandercat.pmdb.util;

import java.util.Collections;
import java.util.DoubleSummaryStatistics;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Statistics for double values.  This class expects the list of doubles to be non-null, contain no null values, and have a size of at least 1.
 * 
 * Standard deviation and interquartile range are lazy calculated when needed.
 * 
 * @author Scott Arnold
 */
public class DoubleStatistics extends NumberStatistics<Double> {

	public static final double IQR_MULTIPLIER = 1.5;  // standard multiplier for finding outliers using IQR
	
	private DoubleSummaryStatistics summaryStatistics;
	
	/**
	 * Construct statistics for the provided list of double values.
	 * 
	 * @param values  double values
	 */
	public DoubleStatistics(List<Double> values) {
		super(values);
		this.summaryStatistics = values.stream().collect(Collectors.summarizingDouble(value -> value));
	}

	@Override
	protected void sort(List<Double> values) {
		Collections.sort(values);
	}

	@Override
	protected Double parse(String value) {
		try {
			return Double.valueOf(value);
		} catch (Exception e) {
		}
		return null;
	}
	
	@Override
	public Double getMin() {
		return summaryStatistics.getMin();
	}

	@Override
	public Double getMax() {
		return summaryStatistics.getMax();
	}

	@Override
	public double getAverage() {
		return summaryStatistics.getAverage();
	}
}