diff --git a/core-java-8/src/test/java/com/baeldung/counter/CounterStatistics.java b/core-java-8/src/test/java/com/baeldung/counter/CounterStatistics.java index 2a42a166fa..015ca3f942 100644 --- a/core-java-8/src/test/java/com/baeldung/counter/CounterStatistics.java +++ b/core-java-8/src/test/java/com/baeldung/counter/CounterStatistics.java @@ -2,6 +2,7 @@ package com.baeldung.counter; import java.util.HashMap; import java.util.Map; +import java.util.Random; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.BenchmarkMode; @@ -18,8 +19,18 @@ public class CounterStatistics { private static final Map counterWithMutableIntMap = new HashMap<>(); private static final Map counterWithIntArrayMap = new HashMap<>(); private static final Map counterWithLongWrapperMap = new HashMap<>(); + private static final Map counterWithLongWrapperStreamMap = new HashMap<>(); + + static { + CounterUtil.COUNTRY_NAMES = new String[10000]; + final String prefix = "NewString"; + Random random = new Random(); + for (int i=0; i<10000; i++) { + CounterUtil.COUNTRY_NAMES[i] = new String(prefix + random.nextInt(1000)); + } + } - @Benchmark + @Benchmark public void wrapperAsCounter() { CounterUtil.counterWithWrapperObject(counterMap); } @@ -28,6 +39,11 @@ public class CounterStatistics { public void lambdaExpressionWithWrapper() { CounterUtil.counterWithLambdaAndWrapper(counterWithLongWrapperMap); } + + @Benchmark + public void parallelStreamWithWrapper() { + CounterUtil.counterWithParallelStreamAndWrapper(counterWithLongWrapperStreamMap); + } @Benchmark public void mutableIntegerAsCounter() { diff --git a/core-java-8/src/test/java/com/baeldung/counter/CounterUtil.java b/core-java-8/src/test/java/com/baeldung/counter/CounterUtil.java index afd7202892..c2bf47e213 100644 --- a/core-java-8/src/test/java/com/baeldung/counter/CounterUtil.java +++ b/core-java-8/src/test/java/com/baeldung/counter/CounterUtil.java @@ -6,7 +6,7 @@ import java.util.stream.Stream; public class CounterUtil { - private final static String[] COUNTRY_NAMES = { "China", "Australia", "India", "USA", "USSR", "UK", "China", "France", "Poland", "Austria", "India", "USA", "Egypt", "China" }; + public static String[] COUNTRY_NAMES = { "China", "Australia", "India", "USA", "USSR", "UK", "China", "France", "Poland", "Austria", "India", "USA", "Egypt", "China" }; public static void counterWithWrapperObject(Map counterMap) { for (String country : COUNTRY_NAMES) { @@ -15,9 +15,14 @@ public class CounterUtil { } public static void counterWithLambdaAndWrapper(Map counterMap) { - counterMap.putAll(Stream.of(COUNTRY_NAMES) + Stream.of(COUNTRY_NAMES) + .collect(Collectors.groupingBy(k -> k, () -> counterMap, Collectors.counting())); + } + + public static void counterWithParallelStreamAndWrapper(Map counterMap) { + Stream.of(COUNTRY_NAMES) .parallel() - .collect(Collectors.groupingBy(k -> k, Collectors.counting()))); + .collect(Collectors.groupingBy(k -> k, () -> counterMap, Collectors.counting())); } public static class MutableInteger { @@ -49,4 +54,4 @@ public class CounterUtil { } } -} +} \ No newline at end of file