From ac32eebb539447741c6e80d8dc6473abac2e551d Mon Sep 17 00:00:00 2001 From: Jagath Kumar <1611881-jagathks@users.noreply.gitlab.com> Date: Mon, 8 Apr 2024 17:03:26 +0530 Subject: [PATCH] calculating Moving averages - review fixes --- .../algorithms-miscellaneous-9}/pom.xml | 17 ++++----- .../baeldung/ExponentialMovingAverage.java | 0 .../MovingAverageByCircularBuffer.java | 0 .../MovingAverageWithApacheCommonsMath.java | 0 .../MovingAverageWithStreamBasedApproach.java | 18 +++++++++ .../ExponentialMovingAverageUnitTest.java | 3 +- ...MovingAverageByCircularBufferUnitTest.java | 1 - ...gAverageWithApacheCommonsMathUnitTest.java | 1 - ...verageWithStreamBasedApproachUnitTest.java | 38 +++++++++++++++++++ algorithms-modules/pom.xml | 1 + core-java-modules/pom.xml | 1 - 11 files changed, 66 insertions(+), 14 deletions(-) rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/pom.xml (61%) rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/src/main/java/com/baeldung/ExponentialMovingAverage.java (100%) rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/src/main/java/com/baeldung/MovingAverageByCircularBuffer.java (100%) rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/src/main/java/com/baeldung/MovingAverageWithApacheCommonsMath.java (100%) create mode 100644 algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageWithStreamBasedApproach.java rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java (99%) rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java (99%) rename {core-java-modules/core-java-calculating-moving-averages => algorithms-modules/algorithms-miscellaneous-9}/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java (99%) create mode 100644 algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithStreamBasedApproachUnitTest.java diff --git a/core-java-modules/core-java-calculating-moving-averages/pom.xml b/algorithms-modules/algorithms-miscellaneous-9/pom.xml similarity index 61% rename from core-java-modules/core-java-calculating-moving-averages/pom.xml rename to algorithms-modules/algorithms-miscellaneous-9/pom.xml index 33de5a2546..cd44b17184 100644 --- a/core-java-modules/core-java-calculating-moving-averages/pom.xml +++ b/algorithms-modules/algorithms-miscellaneous-9/pom.xml @@ -3,19 +3,18 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - core-java-calculating-moving-averages - core-java-calculating-moving-averages - war - - com.baeldung.core-java-modules - core-java-modules - 0.0.1-SNAPSHOT + com.baeldung + algorithms-modules + 1.0.0-SNAPSHOT + algorithms-miscellaneous-9 + - 3.6.1 + 17 + 17 + UTF-8 diff --git a/core-java-modules/core-java-calculating-moving-averages/src/main/java/com/baeldung/ExponentialMovingAverage.java b/algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/ExponentialMovingAverage.java similarity index 100% rename from core-java-modules/core-java-calculating-moving-averages/src/main/java/com/baeldung/ExponentialMovingAverage.java rename to algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/ExponentialMovingAverage.java diff --git a/core-java-modules/core-java-calculating-moving-averages/src/main/java/com/baeldung/MovingAverageByCircularBuffer.java b/algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageByCircularBuffer.java similarity index 100% rename from core-java-modules/core-java-calculating-moving-averages/src/main/java/com/baeldung/MovingAverageByCircularBuffer.java rename to algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageByCircularBuffer.java diff --git a/core-java-modules/core-java-calculating-moving-averages/src/main/java/com/baeldung/MovingAverageWithApacheCommonsMath.java b/algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageWithApacheCommonsMath.java similarity index 100% rename from core-java-modules/core-java-calculating-moving-averages/src/main/java/com/baeldung/MovingAverageWithApacheCommonsMath.java rename to algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageWithApacheCommonsMath.java diff --git a/algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageWithStreamBasedApproach.java b/algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageWithStreamBasedApproach.java new file mode 100644 index 0000000000..d89e3d9284 --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-9/src/main/java/com/baeldung/MovingAverageWithStreamBasedApproach.java @@ -0,0 +1,18 @@ +package com.baeldung; + +import java.util.stream.DoubleStream; + +public class MovingAverageWithStreamBasedApproach { + private int windowSize; + + public MovingAverageWithStreamBasedApproach(int windowSize) { + this.windowSize = windowSize; + } + public double calculateAverage(double[] data) { + return DoubleStream.of(data) + .skip(Math.max(0, data.length - windowSize)) + .limit(Math.min(data.length, windowSize)) + .summaryStatistics() + .getAverage(); + } +} diff --git a/core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java similarity index 99% rename from core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java rename to algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java index 9db186662d..26251095a8 100644 --- a/core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java +++ b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/ExponentialMovingAverageUnitTest.java @@ -1,8 +1,7 @@ package com.baeldung; -import org.junit.Test; - import static org.junit.Assert.assertEquals; +import org.junit.Test; public class ExponentialMovingAverageUnitTest { diff --git a/core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java similarity index 99% rename from core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java rename to algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java index 2e213adbbb..4f641739b1 100644 --- a/core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java +++ b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageByCircularBufferUnitTest.java @@ -1,7 +1,6 @@ package com.baeldung; import org.junit.Test; - import static org.junit.Assert.assertEquals; public class MovingAverageByCircularBufferUnitTest { diff --git a/core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java similarity index 99% rename from core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java rename to algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java index d2212a59d2..fff884ec01 100644 --- a/core-java-modules/core-java-calculating-moving-averages/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java +++ b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithApacheCommonsMathUnitTest.java @@ -1,7 +1,6 @@ package com.baeldung; import org.junit.Test; - import static org.junit.Assert.assertEquals; public class MovingAverageWithApacheCommonsMathUnitTest { diff --git a/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithStreamBasedApproachUnitTest.java b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithStreamBasedApproachUnitTest.java new file mode 100644 index 0000000000..bf8775e51a --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-9/src/test/java/com/baeldung/MovingAverageWithStreamBasedApproachUnitTest.java @@ -0,0 +1,38 @@ +package com.baeldung; + +import org.junit.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class MovingAverageWithStreamBasedApproachUnitTest { + + @Test + public void whenEmptyDataIsPassed_shouldReturnZero() { + double[] data = {}; + int windowSize = 3; + double expectedAverage = 0; + MovingAverageWithStreamBasedApproach calculator = new MovingAverageWithStreamBasedApproach(windowSize); + double actualAverage = calculator.calculateAverage(data); + assertEquals(expectedAverage, actualAverage); + } + + @Test + public void whenValidDataIsPassed_shouldReturnCorrectAverage() { + double[] data = {10, 20, 30, 40, 50}; + int windowSize = 3; + double expectedAverage = 40; + MovingAverageWithStreamBasedApproach calculator = new MovingAverageWithStreamBasedApproach(windowSize); + double actualAverage = calculator.calculateAverage(data); + assertEquals(expectedAverage, actualAverage); + } + + @Test + public void whenValidDataIsPassedWithLongerWindowSize_shouldReturnCorrectAverage() { + double[] data = {10, 20, 30, 40, 50}; + int windowSize = 5; + double expectedAverage = 30; + MovingAverageWithStreamBasedApproach calculator = new MovingAverageWithStreamBasedApproach(windowSize); + double actualAverage = calculator.calculateAverage(data); + assertEquals(expectedAverage, actualAverage); + } +} \ No newline at end of file diff --git a/algorithms-modules/pom.xml b/algorithms-modules/pom.xml index d3f27f4fa8..aaaac86b6d 100644 --- a/algorithms-modules/pom.xml +++ b/algorithms-modules/pom.xml @@ -26,6 +26,7 @@ algorithms-searching algorithms-sorting algorithms-sorting-2 + algorithms-miscellaneous-9 diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 9d5a19104e..00c40151e4 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -224,7 +224,6 @@ java-rmi java-spi java-websocket - core-java-calculating-moving-averages