Skip to content

Commit b63acee

Browse files
committed
add parallel stream with side effect example
1 parent 8e2faa1 commit b63acee

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

src/main/java/lambdasinaction/chap6/ParallelStreams.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,24 @@ public static long rangedSum(long n) {
2727
public static long parallelRangedSum(long n) {
2828
return LongStream.rangeClosed(1, n).parallel().reduce(Long::sum).getAsLong();
2929
}
30+
31+
public static long sideEffectSum(long n) {
32+
Accumulator accumulator = new Accumulator();
33+
LongStream.rangeClosed(1, n).forEach(accumulator::add);
34+
return accumulator.total;
35+
}
36+
37+
public static long sideEffectParallelSum(long n) {
38+
Accumulator accumulator = new Accumulator();
39+
LongStream.rangeClosed(1, n).parallel().forEach(accumulator::add);
40+
return accumulator.total;
41+
}
42+
43+
public static class Accumulator {
44+
private long total = 0;
45+
46+
public void add(long value) {
47+
total += value;
48+
}
49+
}
3050
}

src/main/java/lambdasinaction/chap6/ParallelStreamsHarness.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public static void main(String[] args) {
1414
System.out.println("Range forkJoinSum done in: " + measurePerf(ParallelStreams::rangedSum, 10_000_000L) + " msecs");
1515
System.out.println("Parallel range forkJoinSum done in: " + measurePerf(ParallelStreams::parallelRangedSum, 10_000_000L) + " msecs" );
1616
System.out.println("ForkJoin sum done in: " + measurePerf(ForkJoinSumCalculator::forkJoinSum, 10_000_000L) + " msecs" );
17+
System.out.println("SideEffect sum done in: " + measurePerf(ParallelStreams::sideEffectSum, 10_000_000L) + " msecs" );
18+
System.out.println("SideEffect prallel sum done in: " + measurePerf(ParallelStreams::sideEffectParallelSum, 10_000_000L) + " msecs" );
1719
}
1820

1921
public static <T, R> long measurePerf(Function<T, R> f, T input) {

0 commit comments

Comments
 (0)