From 5e9d5b9e679a465b79411dec2733059fa4cbe4cc Mon Sep 17 00:00:00 2001 From: Raffi Khatchadourian Date: Sun, 19 Aug 2018 18:03:10 -0400 Subject: [PATCH 1/2] Apply Optimize Java 8 Stream refactoring. See https://github.com/ponder-lab/Optimize-Java-8-Streams-Refactoring. --- .../java/com/iluwatar/abstractdocument/AbstractDocument.java | 4 ++-- dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java | 2 +- dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java | 2 +- .../src/main/java/com/iluwatar/doubledispatch/App.java | 4 ++-- layers/src/main/java/com/iluwatar/layers/CakeInfo.java | 2 +- layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java | 2 +- .../src/main/java/com/iluwatar/message/channel/App.java | 2 +- .../src/main/java/com/iluwatar/publish/subscribe/App.java | 2 +- .../src/main/java/com/iluwatar/specification/app/App.java | 4 ++-- .../src/test/java/com/iluwatar/threadpool/TaskTest.java | 5 +++-- 10 files changed, 15 insertions(+), 14 deletions(-) diff --git a/abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java b/abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java index 36a946cc9eca..a9910a2dc807 100644 --- a/abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java +++ b/abstract-document/src/main/java/com/iluwatar/abstractdocument/AbstractDocument.java @@ -54,9 +54,9 @@ public Object get(String key) { @Override public Stream children(String key, Function, T> constructor) { - Optional>> any = Stream.of(get(key)).filter(el -> el != null) + Optional>> any = Stream.of(get(key)).parallel().filter(el -> el != null) .map(el -> (List>) el).findAny(); - return any.isPresent() ? any.get().stream().map(constructor) : Stream.empty(); + return any.isPresent() ? any.get().parallelStream().map(constructor) : Stream.empty(); } @Override diff --git a/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java index fa2e411dab56..2a6ac91c2838 100644 --- a/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/DbCustomerDao.java @@ -86,7 +86,7 @@ public boolean tryAdvance(Consumer action) { throw new RuntimeException(e); // NOSONAR } } - }, false).onClose(() -> mutedClose(connection, statement, resultSet)); + }, false).parallel().onClose(() -> mutedClose(connection, statement, resultSet)); } catch (SQLException e) { throw new CustomException(e.getMessage(), e); } diff --git a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java index 947da23ca4a0..071db4f0b37d 100644 --- a/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java +++ b/dao/src/main/java/com/iluwatar/dao/InMemoryCustomerDao.java @@ -43,7 +43,7 @@ public class InMemoryCustomerDao implements CustomerDao { */ @Override public Stream getAll() { - return idToCustomer.values().stream(); + return idToCustomer.values().parallelStream(); } @Override diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java index acb57d457167..cbd3196097bc 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java @@ -63,7 +63,7 @@ public static void main(String[] args) { objects.add(new SpaceStationMir(1, 1, 2, 2)); objects.add(new Meteoroid(10, 10, 15, 15)); objects.add(new SpaceStationIss(12, 12, 14, 14)); - objects.stream().forEach(o -> LOGGER.info(o.toString())); + objects.parallelStream().forEach(o -> LOGGER.info(o.toString())); LOGGER.info(""); // collision check @@ -75,7 +75,7 @@ public static void main(String[] args) { LOGGER.info(""); // output eventual object statuses - objects.stream().forEach(o -> LOGGER.info(o.toString())); + objects.parallelStream().forEach(o -> LOGGER.info(o.toString())); LOGGER.info(""); } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java index a1a2cb12eb9f..2c7fcdfc182d 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeInfo.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeInfo.java @@ -59,7 +59,7 @@ public CakeInfo(CakeToppingInfo cakeToppingInfo, List cakeLayerIn */ public int calculateTotalCalories() { int total = cakeToppingInfo != null ? cakeToppingInfo.calories : 0; - total += cakeLayerInfos.stream().mapToInt(c -> c.calories).sum(); + total += cakeLayerInfos.parallelStream().mapToInt(c -> c.calories).sum(); return total; } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java index 57bb0a561b0f..409f98346073 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java @@ -41,6 +41,6 @@ public CakeViewImpl(CakeBakingService cakeBakingService) { } public void render() { - cakeBakingService.getAllCakes().stream().forEach(cake -> LOGGER.info(cake.toString())); + cakeBakingService.getAllCakes().parallelStream().forEach(cake -> LOGGER.info(cake.toString())); } } diff --git a/message-channel/src/main/java/com/iluwatar/message/channel/App.java b/message-channel/src/main/java/com/iluwatar/message/channel/App.java index d2974e20bbff..ac1dcccab41b 100644 --- a/message-channel/src/main/java/com/iluwatar/message/channel/App.java +++ b/message-channel/src/main/java/com/iluwatar/message/channel/App.java @@ -70,7 +70,7 @@ public void configure() throws Exception { }); context.start(); - context.getRoutes().stream().forEach(r -> LOGGER.info(r.toString())); + context.getRoutes().parallelStream().forEach(r -> LOGGER.info(r.toString())); context.stop(); } } diff --git a/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java b/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java index d642846fb24e..9a6449a279fb 100644 --- a/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java +++ b/publish-subscribe/src/main/java/com/iluwatar/publish/subscribe/App.java @@ -65,7 +65,7 @@ public void configure() throws Exception { }); ProducerTemplate template = context.createProducerTemplate(); context.start(); - context.getRoutes().stream().forEach(r -> LOGGER.info(r.toString())); + context.getRoutes().parallelStream().forEach(r -> LOGGER.info(r.toString())); template.sendBody("direct:origin", "Hello from origin"); context.stop(); } diff --git a/specification/src/main/java/com/iluwatar/specification/app/App.java b/specification/src/main/java/com/iluwatar/specification/app/App.java index d4289f2d883f..93c94101714e 100644 --- a/specification/src/main/java/com/iluwatar/specification/app/App.java +++ b/specification/src/main/java/com/iluwatar/specification/app/App.java @@ -68,13 +68,13 @@ public static void main(String[] args) { // find all walking creatures LOGGER.info("Find all walking creatures"); List walkingCreatures = - creatures.stream().filter(new MovementSelector(Movement.WALKING)) + creatures.parallelStream().filter(new MovementSelector(Movement.WALKING)) .collect(Collectors.toList()); walkingCreatures.stream().forEach(c -> LOGGER.info(c.toString())); // find all dark creatures LOGGER.info("Find all dark creatures"); List darkCreatures = - creatures.stream().filter(new ColorSelector(Color.DARK)).collect(Collectors.toList()); + creatures.parallelStream().filter(new ColorSelector(Color.DARK)).collect(Collectors.toList()); darkCreatures.stream().forEach(c -> LOGGER.info(c.toString())); // find all red and flying creatures LOGGER.info("Find all red and flying creatures"); diff --git a/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java b/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java index 099cdc6e81be..f2686b8610b5 100644 --- a/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java +++ b/thread-pool/src/test/java/com/iluwatar/threadpool/TaskTest.java @@ -94,14 +94,15 @@ public void testIdGeneration() throws Exception { } final List ids = service.invokeAll(tasks) - .stream() + .parallelStream() .map(TaskTest::get) .filter(Objects::nonNull) .collect(Collectors.toList()); service.shutdownNow(); - final long uniqueIdCount = ids.stream() + final long uniqueIdCount = ids.parallelStream() + .unordered() .distinct() .count(); From 7dacf34685aa9c1f66372c50f4c256bb1a16ba73 Mon Sep 17 00:00:00 2001 From: Raffi Khatchadourian Date: Mon, 20 Aug 2018 12:19:05 -0400 Subject: [PATCH 2/2] Remove some spurious refactorings. We don't want log statements done in parallel. This is a manual step. --- .../src/main/java/com/iluwatar/doubledispatch/App.java | 4 ++-- layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java index cbd3196097bc..acb57d457167 100644 --- a/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java +++ b/double-dispatch/src/main/java/com/iluwatar/doubledispatch/App.java @@ -63,7 +63,7 @@ public static void main(String[] args) { objects.add(new SpaceStationMir(1, 1, 2, 2)); objects.add(new Meteoroid(10, 10, 15, 15)); objects.add(new SpaceStationIss(12, 12, 14, 14)); - objects.parallelStream().forEach(o -> LOGGER.info(o.toString())); + objects.stream().forEach(o -> LOGGER.info(o.toString())); LOGGER.info(""); // collision check @@ -75,7 +75,7 @@ public static void main(String[] args) { LOGGER.info(""); // output eventual object statuses - objects.parallelStream().forEach(o -> LOGGER.info(o.toString())); + objects.stream().forEach(o -> LOGGER.info(o.toString())); LOGGER.info(""); } } diff --git a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java index 409f98346073..57bb0a561b0f 100644 --- a/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java +++ b/layers/src/main/java/com/iluwatar/layers/CakeViewImpl.java @@ -41,6 +41,6 @@ public CakeViewImpl(CakeBakingService cakeBakingService) { } public void render() { - cakeBakingService.getAllCakes().parallelStream().forEach(cake -> LOGGER.info(cake.toString())); + cakeBakingService.getAllCakes().stream().forEach(cake -> LOGGER.info(cake.toString())); } }