@Override
 double aggregate(final List<Integer> values) {
   // avoid division by zero
   if (values.isEmpty()) {
     return 0.0;
   }
   return SUM.aggregate(values) / AMOUNT.aggregate(values);
 }
 public double getStatistics(Attribute attribute, String name, String parameter) {
   if (AVERAGE.equals(name)) {
     return this.sum / this.valueCounter;
   } else if (VARIANCE.equals(name)) {
     if (valueCounter <= 1) {
       return 0;
     }
     double variance = (squaredSum - (sum * sum) / valueCounter) / (valueCounter - 1);
     if (variance < 0) // this is due to rounding errors above
     return 0;
     return variance;
   } else if (SUM.equals(name)) {
     return this.sum;
   } else {
     LogService.getGlobal()
         .log("Cannot calculate statistics, unknown type: " + name, LogService.WARNING);
     return Double.NaN;
   }
 }
 public boolean handleStatistics(String name) {
   return AVERAGE.equals(name) || VARIANCE.equals(name) || SUM.equals(name);
 }