How to write a method that takes in a List of Integer, Float, Double and calculate the average?

I am trying to write a method that takes in a list of numeric values – eg List<Integer>, List<Float>, List<Double> etc – and give me the average.

public double getAverage(List<? extends Number> stats) {
    double sum = 0.00;
    if(!stats.isEmpty()) {
        // sum = stats.stream()
        //            .reduce(0, (a, b) -> a + b);
        // return sum / stats.size();
    }
}

These are the errors I get:

Operator '+' cannot be applied to 'capture<? extends java.lang.Number>', 'capture<? extends java.lang.Number>'

>Solution :

Try this:

public double getAverage(List<? extends Number> stats) {
    return stats.stream()
      .mapToDouble(Number::doubleValue)
      .summaryStatistics()
      .getAverage();
}

or

public double getAverage(List<? extends Number> stats) {
    return stats.stream()
      .mapToDouble(Number::doubleValue)
      .average()
      .orElse(0);
}

depending on which style you prefer.

Leave a Reply