From b4776ae6e85a693b44c869c8ebc610b10abdf19f Mon Sep 17 00:00:00 2001 From: parthiv39731 <70740707+parthiv39731@users.noreply.github.com> Date: Tue, 29 Aug 2023 08:34:38 -0700 Subject: [PATCH] BAEL-6865, implemented review comments --- .../entity/ExceptionAggregator.java | 27 ---------- .../CustomCollector.java | 12 +---- .../CustomMapper.java | 4 +- .../entity/Result.java | 2 +- .../AggregateExceptionHandlerUnitTest.java | 53 +++++++++---------- 5 files changed, 30 insertions(+), 68 deletions(-) delete mode 100644 core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/ExceptionAggregator.java rename core-java-modules/core-java-streams-5/src/main/java/com/baeldung/{aggregateEx => aggregateexception}/CustomCollector.java (71%) rename core-java-modules/core-java-streams-5/src/main/java/com/baeldung/{aggregateEx => aggregateexception}/CustomMapper.java (78%) rename core-java-modules/core-java-streams-5/src/main/java/com/baeldung/{aggregateEx => aggregateexception}/entity/Result.java (91%) rename core-java-modules/core-java-streams-5/src/test/java/com/baeldung/{aggregateEx => aggregateexception}/AggregateExceptionHandlerUnitTest.java (72%) diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/ExceptionAggregator.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/ExceptionAggregator.java deleted file mode 100644 index 50e11ca33e..0000000000 --- a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/ExceptionAggregator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.aggregateEx.entity; - -import java.util.ArrayList; -import java.util.List; - -public class ExceptionAggregator extends RuntimeException { - private List exceptions; - - public ExceptionAggregator(String message) { - super(message); - exceptions = new ArrayList<>(); - } - - public List getExceptions() { - return exceptions; - } - - public Throwable addException(Throwable e) { - this.addSuppressed(e); - exceptions.add(e); - return e; - } - - public void addExceptions(List exceptions) { - exceptions.forEach(this::addException); - } -} diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/CustomCollector.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomCollector.java similarity index 71% rename from core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/CustomCollector.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomCollector.java index 4e3c2679a1..dea3d3f44c 100644 --- a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/CustomCollector.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomCollector.java @@ -1,6 +1,4 @@ -package com.baeldung.aggregateEx; - -import com.baeldung.aggregateEx.entity.ExceptionAggregator; +package com.baeldung.aggregateexception; import java.util.ArrayList; import java.util.List; @@ -11,8 +9,6 @@ public class CustomCollector { private final List results = new ArrayList<>(); private final List exceptions = new ArrayList<>(); - private final ExceptionAggregator exceptionAggregator = new ExceptionAggregator("Exceptions occurred"); - public static Collector> of(Function mapper) { return Collector.of( CustomCollector::new, @@ -22,13 +18,11 @@ public class CustomCollector { collector.results.add(result); } catch (Exception e) { collector.exceptions.add(e); - collector.exceptionAggregator.addException(e); } }, (left, right) -> { left.results.addAll(right.results); left.exceptions.addAll(right.exceptions); - left.exceptionAggregator.addExceptions(right.exceptions); return left; } ); @@ -41,8 +35,4 @@ public class CustomCollector { public List getExceptions() { return exceptions; } - - public ExceptionAggregator getExceptionAggregator() { - return exceptionAggregator; - } } diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/CustomMapper.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomMapper.java similarity index 78% rename from core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/CustomMapper.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomMapper.java index 2e4de3ac66..920c963337 100644 --- a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/CustomMapper.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/CustomMapper.java @@ -1,6 +1,6 @@ -package com.baeldung.aggregateEx; +package com.baeldung.aggregateexception; -import com.baeldung.aggregateEx.entity.Result; +import com.baeldung.aggregateexception.entity.Result; import java.util.function.Function; diff --git a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/Result.java b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/entity/Result.java similarity index 91% rename from core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/Result.java rename to core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/entity/Result.java index 95823d0bc9..b723c3e510 100644 --- a/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateEx/entity/Result.java +++ b/core-java-modules/core-java-streams-5/src/main/java/com/baeldung/aggregateexception/entity/Result.java @@ -1,4 +1,4 @@ -package com.baeldung.aggregateEx.entity; +package com.baeldung.aggregateexception.entity; import java.util.Optional; diff --git a/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateEx/AggregateExceptionHandlerUnitTest.java b/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateexception/AggregateExceptionHandlerUnitTest.java similarity index 72% rename from core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateEx/AggregateExceptionHandlerUnitTest.java rename to core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateexception/AggregateExceptionHandlerUnitTest.java index 17a53f41f5..0a6a294f3a 100644 --- a/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateEx/AggregateExceptionHandlerUnitTest.java +++ b/core-java-modules/core-java-streams-5/src/test/java/com/baeldung/aggregateexception/AggregateExceptionHandlerUnitTest.java @@ -1,7 +1,6 @@ -package com.baeldung.aggregateEx; +package com.baeldung.aggregateexception; -import com.baeldung.aggregateEx.entity.ExceptionAggregator; -import com.baeldung.aggregateEx.entity.Result; +import com.baeldung.aggregateexception.entity.Result; import io.vavr.control.Either; import io.vavr.control.Try; import org.junit.Test; @@ -18,12 +17,12 @@ import static org.junit.Assert.assertEquals; public class AggregateExceptionHandlerUnitTest { - static Logger logger = LoggerFactory.getLogger(AggregateExceptionHandlerUnitTest.class); + private static final Logger logger = LoggerFactory.getLogger(AggregateExceptionHandlerUnitTest.class); @Test public void givenExtractedMethod_whenFoundEx_thenSuppressExIntoRuntimeEx() { String[] strings = {"1", "2", "3", "a", "b", "c"}; - Throwable runEx = Arrays.stream(strings) + RuntimeException runEx = Arrays.stream(strings) .map(str -> callProcessThrowsExAndNoOutput(str)) .filter(Objects::nonNull) .reduce(new RuntimeException("Errors Occurred"), (o1, o2) -> { @@ -58,11 +57,13 @@ public class AggregateExceptionHandlerUnitTest { @Test public void givenProcessMethod_whenStreamResultHasExAndOutput_thenHandleExceptionListAndOutputList() { List strings = List.of("1", "2", "3", "a", "b", "c"); - Map map = strings.stream() + Map> map = strings.stream() .map(s -> processReturnsExAndOutput(s)) .collect(Collectors.partitioningBy(o -> o instanceof RuntimeException, Collectors.toList())); - assert(map.containsKey(Boolean.TRUE) && map.containsKey(Boolean.FALSE)); - handleExceptionsAndOutputs((List) map.get(Boolean.TRUE), (List)map.get(Boolean.FALSE)); + + List exceptions = map.getOrDefault(Boolean.TRUE, List.of()); + List results = map.getOrDefault(Boolean.FALSE, List.of()); + handleExceptionsAndOutputs(exceptions, results); } @Test @@ -70,17 +71,15 @@ public class AggregateExceptionHandlerUnitTest { List strings = List.of("1", "2", "3", "a", "b", "c"); strings.stream() .map(CustomMapper.mapper(Integer::parseInt)) - .collect(Collectors.collectingAndThen(Collectors.toList(), list -> handleErrorsAndOutPutForResult(list))); + .collect(Collectors.collectingAndThen(Collectors.toList(), list -> handleErrorsAndOutputForResult(list))); } @Test public void givenCustomCollector_whenStreamResultHasExAndSuccess_thenHandleAggrExceptionAndResults() { String[] strings = {"1", "2", "3", "a", "b", "c"}; Arrays.stream(strings) - .collect(Collectors.collectingAndThen(CustomCollector.of(Integer::parseInt), col -> { - handleExAndResults(col.getExceptionAggregator(), col.getResults()); - return col; - })); + .collect(Collectors.collectingAndThen(CustomCollector.of(Integer::parseInt), + col -> handleExAndResults(col.getExceptions(), col.getResults()))); } @Test @@ -88,19 +87,17 @@ public class AggregateExceptionHandlerUnitTest { List strings = List.of("1", "2", "3", "a", "b", "c"); strings.stream() .map(str -> Try.of(() -> Integer.parseInt(str)).toEither()) - .collect(Collectors.collectingAndThen(Collectors.partitioningBy(Either::isLeft, Collectors.toList()), map -> { - handleErrorsAndOutPutForEither(map); - return map; - })); + .collect(Collectors.collectingAndThen(Collectors.partitioningBy(Either::isLeft, Collectors.toList()) + , map -> handleErrorsAndOutputForEither(map))); } private static void processThrowsExAndNoOutput(String input) { - //return exception when input is "a", "b", "c" + //throw exception when input is "a", "b", "c" if (input.matches("[a-c]")) { throw new RuntimeException("Downstream method throws exception for " + input); } } - private static Throwable callProcessThrowsExAndNoOutput(String input) { + private static RuntimeException callProcessThrowsExAndNoOutput(String input) { try { processThrowsExAndNoOutput(input); return null; @@ -122,22 +119,24 @@ public class AggregateExceptionHandlerUnitTest { logger.error("Process Exception" + throwable.getMessage()); } - private static void handleExceptionsAndOutputs(List exs, List output) { - logger.info("handle exceptions and output"); + private static void handleExceptionsAndOutputs(List exs, List output) { + logger.info("number of exceptions " + exs.size() + " number of outputs " + output.size()); } - private static void handleExAndResults(ExceptionAggregator exAgg, List results ) { - logger.info("handle aggregated exceptions and results" + exAgg.getExceptions().size() + " " + results.size()); + private static String handleExAndResults(List ex, List results ) { + logger.info("handle aggregated exceptions and results" + ex.size() + " " + results.size()); + return "Exceptions and Results Handled"; } - private static void handleErrorsAndOutPutForEither(Map>> map) { + private static String handleErrorsAndOutputForEither(Map>> map) { logger.info("handle errors and output"); - map.get(Boolean.TRUE).forEach(either -> logger.error("Process Exception " + either.getLeft())); + map.getOrDefault(Boolean.TRUE, List.of()).forEach(either -> logger.error("Process Exception " + either.getLeft())); - map.get(Boolean.FALSE).forEach(either -> logger.info("Process Result " + either.get())); + map.getOrDefault(Boolean.FALSE, List.of()).forEach(either -> logger.info("Process Result " + either.get())); + return "Errors and Output Handled"; } - private static String handleErrorsAndOutPutForResult(List> successAndErrors) { + private static String handleErrorsAndOutputForResult(List> successAndErrors) { logger.info("handle errors and output"); successAndErrors.forEach(result -> { if (result.getException().isPresent()) {