67 lines
1.5 KiB
Java

package patternmatching;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.stream.Collectors;
public final class Statistics {
private final long[] data;
private Double mean = null;
private Double variance = null;
private Statistics(long[] data) {
this.data = data;
}
double getMean() {
if (mean == null) {
mean = (double) Arrays.stream(data).sum() / data.length;
}
return mean;
}
double getVariance() {
if (variance == null) {
final double mean = getMean();
double temp = 0;
for(double a : data) {
temp += (a-mean)*(a-mean);
}
variance = temp/(data.length-1);
}
return variance;
}
double getStddev() {
return Math.sqrt(getVariance());
}
double getMedian() {
Arrays.sort(data);
if (data.length % 2 == 0) return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
return data[data.length / 2];
}
static Statistics from(long[] data) {
return new Statistics(data);
}
@Override
public String toString() {
return String.format(
"mean=%.2fms stddev=%.2fms median=%.2fms",
getMean()/1000,
getStddev()/1000,
getMedian()/1000
);
}
public String asCSv() {
final String csv = Arrays.stream(data).mapToObj(String::valueOf).collect(Collectors.joining(","));
return csv;
}
}