Based on this answer you can do:
public static double variance(final Iterator<Integer> iterator) {
List<Integer> array = new ArrayList<>();
iterator.forEachRemaining(array::add);
double mean = mean(array);
double temp = 0;
for(double a :array)
temp += (a-mean)*(a-mean);
return temp/(array.size()-1);
}
But it is strange that in mean
is used List
. If this Iterator
is not needed than it can be:
public static double variance(final List<Integer> array) {
double mean = mean(array);
double temp = 0;
for(double a :array)
temp += (a-mean)*(a-mean);
return temp/(array.size()-1);
}
And with stream
public static double variance(final Iterator<Integer> iterator) {
List<Integer> array = new ArrayList<>();
iterator.forEachRemaining(array::add);
double mean = mean(array);
return array.stream()
.map(a -> (a-mean)*(a-mean))
.reduce(0d, Double::sum)/(array.size()-1);
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…