0
我有一個計算包含的統計數據類型float的ArrayList的第95百分位的方法:我怎樣才能讓這個Java方法完全通用
public String calculatePercentile(ArrayList<Float> arrayOfStats) {
this.statistics = (ArrayList<Float>) arrayOfStats.clone();
int N = statistics.size();
int integerPart =0;
int fractionalPart =0;
int fraction =0;
float rank =0;
float floatPoint =0;
float interpolate=0;
float interpolateFirstPart =0;
float interpolateSecondPart =0;
if (N == 0) {
return Float.toString(0);
} else {
Collections.sort(statistics);
rank = (float) ((P/100.0) * (N - 1));
if (rank == Math.round(rank)) {
return Float.toString(statistics.get((int) rank));
} else {
String split = Float.toString(rank);
Pattern pattern = Pattern.compile(floatRegExPattern);
Matcher matcher = pattern.matcher(split);
while(matcher.find()) {
integerPart = Integer.parseInt(matcher.group(1));
fractionalPart = Integer.parseInt(matcher.group(3));
}
if (fractionalPart < 10) {
floatPoint = (float) (fractionalPart/10);
} else {
floatPoint = (float) fractionalPart/100;
}
fraction = integerPart + 1;
interpolateFirstPart = statistics.get(fraction);
interpolateSecondPart = statistics.get(integerPart);
interpolate = interpolateFirstPart - interpolateSecondPart;
return roundToTwoDecimalPlaces((floatPoint * interpolate) + interpolateFirstPart);
}
}
}
我的問題是我怎麼能做出這種方法一般使它不能只是接受並計算Float類型的ArrayList,但它也可以做整型等我曾嘗試使用模板,如
ArrayList<? as Number>
,但是當我到達Collections.sort,它抱怨和我不能」弄清楚什麼是錯的。返回值需要是一個字符串。
將Number用作泛型是相當困難的,因爲由於顯而易見的原因它無法進行數學運算。您可以使用列表,然後調用doubleValue,然後以雙精度執行所有算術。 –
2013-04-09 17:44:32
你最好不要那麼做,你的ArrayList已經使用tripple所需的內存。所以ArrayList就足夠了。如果您想要大量元素,請考慮使用Appache Commons-Math的GrowingIntArray(具有統計功能);不推薦使用正則表達式計算95%的百分位數。 –
AlexWien
2013-04-09 17:53:31