Given a long array of latencies which are in milliseconds, I want to calculate percentile from them. I got below method which does the work but I am not sure how I can verify whether this gives me accurate result?
public static long[] percentiles(long[] latencies, double... percentiles) {
Arrays.sort(latencies, 0, latencies.length);
long[] values = new long[percentiles.length];
for (int i = 0; i < percentiles.length; i++) {
int index = (int) (percentiles[i] * latencies.length);
values[i] = latencies[index];
}
return values;
}
I would like to get 50th, 95th, 99th and 99.9th percentile from latencies
array.
long[] percs = percentiles(latencies, 0.5, 0.95, 0.99, 0.999);
Is this the right way to get percentile given a long array of latencies? I am working with Java 7.
This is what you are looking for:
public static void main(String[] args) {
List<Long> latencies = new List<Long>() { 3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20 };
System.out.println(percentile(latencies,25));
System.out.println(percentile(latencies, 50));
System.out.println(percentile(latencies, 75));
System.out.println(percentile(latencies, 100));
}
public static long percentile(List<Long> latencies, double percentile) {
Collections.sort(latencies);
int index = (int) Math.ceil(percentile / 100.0 * latencies.size());
return latencies.get(index-1);
}