diff --git a/src/main/java/ru/ulstu/statistic/StatisticService.java b/src/main/java/ru/ulstu/statistic/StatisticService.java index aca1ea8..a2c4f1a 100644 --- a/src/main/java/ru/ulstu/statistic/StatisticService.java +++ b/src/main/java/ru/ulstu/statistic/StatisticService.java @@ -26,18 +26,27 @@ public class StatisticService { return getOptionalValue(Double.valueOf(timeSeries.getLength())); } + public Optional getDispersion(TimeSeries timeSeries) { + Optional maybeAverage = getAverage(timeSeries); + return getOptionalValue(maybeAverage.isPresent() + ? timeSeries.getValues().stream().mapToDouble(v -> Math.pow(v.getValue() - maybeAverage.get(), 2)).sum() / timeSeries.getLength() + : null); + } private DoubleStream getDoubleStream(TimeSeries timeSeries) { return timeSeries.getValues().stream().mapToDouble(TimeSeriesValue::getValue); } private Optional getOptionalValue(OptionalDouble optionalDouble) { - return Optional.ofNullable(optionalDouble.isPresent() + return getOptionalValue(optionalDouble.isPresent() ? optionalDouble.getAsDouble() : null); } private Optional getOptionalValue(Double value) { + value = (value == null) + ? null + : ((double) Math.round(value * 100) / 100); return Optional.ofNullable(value); } @@ -45,6 +54,7 @@ public class StatisticService { return new TimeSeriesStatistic(getMin(timeSeries), getMax(timeSeries), getAverage(timeSeries), - getLength(timeSeries)); + getLength(timeSeries), + getDispersion(timeSeries)); } } diff --git a/src/main/java/ru/ulstu/statistic/TimeSeriesStatistic.java b/src/main/java/ru/ulstu/statistic/TimeSeriesStatistic.java index 7162ad2..398bee0 100644 --- a/src/main/java/ru/ulstu/statistic/TimeSeriesStatistic.java +++ b/src/main/java/ru/ulstu/statistic/TimeSeriesStatistic.java @@ -8,14 +8,18 @@ public class TimeSeriesStatistic { private Optional average; private Optional length; + private Optional dispersion; + public TimeSeriesStatistic(Optional min, Optional max, Optional average, - Optional length) { + Optional length, + Optional dispersion) { this.min = min; this.max = max; this.average = average; this.length = length; + this.dispersion = dispersion; } public Optional getMin() { @@ -33,4 +37,8 @@ public class TimeSeriesStatistic { public Optional getLength() { return length; } + + public Optional getDispersion() { + return dispersion; + } } diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index bc0323e..324624a 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -161,6 +161,10 @@


+

Дисперсия: + +

+