Is there a built-in method to calculate the average of an integer ArrayList?
If not, can I make a function that will do that by taking in the name of the ArrayList and returning its average value?
It's really simple:
// Better use a `List`. It is more generic and it also receives an `ArrayList`.
public static double average(List<Integer> list) {
// 'average' is undefined if there are no elements in the list.
if (list == null || list.isEmpty())
return 0.0;
// Calculate the summation of the elements in the list
long sum = 0;
int n = list.size();
// Iterating manually is faster than using an enhanced for loop.
for (int i = 0; i < n; i++)
sum += list.get(i);
// We don't want to perform an integer division, so the cast is mandatory.
return ((double) sum) / n;
}
For even better performance, use int[]
instead of ArrayList<Integer>
.
If you want to computer later one more than the average I propose Colt library developed at CERN which supports many statistic functions. See BinFunctions1D and DoubleMatrix1D. An alternative (with a recent code basis) may be commons-math:
DescriptiveStatistics stats = new DescriptiveStatistics();
for( int i = 0; i < inputArray.length; i++)
{
stats.addValue(inputArray[i]);
}
double mean = stats.getMean();
Comming soon, using lambda expressions and method references in JDK 8:
DoubleOperator summation = (a, b) -> a + b;
double average = data.mapReduce(Double::valueOf, 0.0, summation) / data.size();
System.out.println("Avergage : " + average);
No there isn't. You can simply iterate over the complete list to add all the numbers and simply divide the sum by length of the array list.
You can use 'mean' from the Apache Commons library.
来源:https://stackoverflow.com/questions/10465989/calculate-average-or-take-in-an-arraylist-as-a-parameter-to-a-function