diff --git a/src/main/java/org/olat/modules/forms/model/jpa/RubricStatisticImpl.java b/src/main/java/org/olat/modules/forms/model/jpa/RubricStatisticImpl.java index 612fe901e143c486d26434e6ea3d1e1723e741e3..393dcb1e42777f3fc188cc6801508f6deca21c42 100644 --- a/src/main/java/org/olat/modules/forms/model/jpa/RubricStatisticImpl.java +++ b/src/main/java/org/olat/modules/forms/model/jpa/RubricStatisticImpl.java @@ -178,13 +178,17 @@ public class RubricStatisticImpl implements RubricStatistic { Double mean = getAverage(stepCounts); if (mean == null) return null; - List<Double> scaledValues = getScaledValues(stepCounts); - if (scaledValues.size() < 2) return null; - double temp = 0; - for(double a: scaledValues) - temp += (a-mean)*(a-mean); - return temp/(scaledValues.size() - 1); + int size = 0; + for (int step = 1; step <= rubric.getSteps(); step++) { + double value = rubric.getScaleType().getStepValue(rubric.getSteps(), step); + int count = stepCounts.get(step - 1).intValue(); + for (int i = 0; i < count; i++) { + temp += (value-mean)*(value-mean); + size++; + } + } + return size > 2? temp/(size - 1): null; } private Double getStdDev(List<Long> stepCounts) { @@ -194,21 +198,6 @@ public class RubricStatisticImpl implements RubricStatistic { return Math.sqrt(getVariance(stepCounts)); } - private List<Double> getScaledValues(List<Long> stepCounts) { - List<Double> scaledValues = new ArrayList<>(); - for (int step = 1; step <= rubric.getSteps(); step++) { - Long count = stepCounts.get(step - 1); - if (count != null) { - double stepValue = rubric.getScaleType().getStepValue(rubric.getSteps(), step); - for (int i = 0; i < count; i++) { - double scaledValue = stepValue * step; - scaledValues.add(Double.valueOf(scaledValue)); - } - } - } - return scaledValues; - } - private void calculateTotalStatistics() { Long numberOfNoResponses = countedNoResponses.stream().mapToLong(CalculatedLong::getValue).sum(); List<Long> totalStepCounts = getTotalStepCounts();