Add pattern matching example
This commit is contained in:
66
lang/src/main/java/patternmatching/Statistics.java
Normal file
66
lang/src/main/java/patternmatching/Statistics.java
Normal file
@@ -0,0 +1,66 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user