Variance.java
package progen.output.plugins;
import java.util.ArrayList;
import java.util.List;
/**
* Plugin que calcula la varianza de todos los elementos introducidos.
*
* @author jirsis
* @since 2.0
*
*/
public class Variance implements Plugin {
/** Referencia al plugin que calcula la media de la colección de elementos. */
private Mean mean;
/** Colección de elementos de los que se calculará la varianza. */
private List<Double> elements;
/**
* Constructor genérico del plugin que recibe un plugin especializado en
* calcular la media de los elementos. De esta forma, se evita tener que
* calcular múltiples veces la media.
*/
public Variance() {
this.mean = new Mean();
elements = new ArrayList<Double>();
}
@SuppressWarnings("rawtypes")
public void addValue(Comparable value) {
elements.add(Double.valueOf(value.toString()));
}
public Object getValue() {
double variance = 0;
for (Double element : elements) {
variance += Math.pow(element - ((Double) mean.getValue()).doubleValue(), 2);
}
return variance / elements.size();
}
public void initialValue() {
elements = new ArrayList<Double>();
}
public String getName() {
return "variance";
}
public int getPriority() {
return 1;
}
public void initPlugin(String propertyFamily) {
// do nothing
}
public Plugin getPlugin(String name) {
Plugin plugin;
if (getName().compareTo(name) == 0) {
plugin = this;
} else {
plugin = new NullPlugin();
}
return plugin;
}
public void checkDependeces(List<Plugin> pluginsCollection) {
Plugin alreadyDefined = null;
// check mean is defined
for (Plugin plugin : pluginsCollection) {
if (plugin.getName().compareTo(mean.getName()) == 0) {
alreadyDefined = plugin;
}
}
if (alreadyDefined == null) {
pluginsCollection.add(mean);
} else {
mean = (Mean) alreadyDefined;
}
}
}