Java Reference
In-Depth Information
18
19
// perform calculcations separately
20
Instant separateStart = Instant.now();
long
count = Arrays.stream(values).count();
long
sum = Arrays.stream(values).sum();
long
min = Arrays.stream(values).min().getAsLong();
long
max = Arrays.stream(values).max().getAsLong();
double
average = Arrays.stream(values).average().getAsDouble();
Instant separateEnd = Instant.now();
21
22
23
24
25
26
27
28
// display results
29
System.out.println(
"Calculations performed separately"
);
30
System.out.printf(
" count: %,d%n"
, count);
31
System.out.printf(
" sum: %,d%n"
, sum);
32
System.out.printf(
" min: %,d%n"
, min);
33
System.out.printf(
" max: %,d%n"
, max);
34
System.out.printf(
" average: %f%n"
, average);
35
System.out.printf(
"Total time in milliseconds: %d%n%n"
,
36
Duration.between(separateStart, separateEnd).toMillis());
37
38
// time sum operation with sequential stream
39
LongStream stream1 = Arrays.stream(values);
40
System.out.println(
"Calculating statistics on sequential stream"
);
41
Instant sequentialStart = Instant.now();
LongSummaryStatistics results1 = stream1.summaryStatistics();
Instant sequentialEnd = Instant.now();
42
43
44
45
// display results
46
displayStatistics(results1);
47
System.out.printf(
"Total time in milliseconds: %d%n%n"
,
48
Duration.between(sequentialStart, sequentialEnd).toMillis());
49
50
// time sum operation with parallel stream
51
LongStream stream2 = Arrays.stream(values).parallel();
52
System.out.println(
"Calculating statistics on parallel stream"
);
53
Instant parallelStart = Instant.now();
LongSummaryStatistics results2 = stream2.summaryStatistics();
Instant parallelEnd = Instant.now();
54
55
56
57
// display results
58
displayStatistics(results1);
59
System.out.printf(
"Total time in milliseconds: %d%n%n"
,
60
Duration.between(parallelStart, parallelEnd).toMillis());
61
}
62
63
// display's LongSummaryStatistics values
64
private static void
displayStatistics(LongSummaryStatistics stats)
65
{
66
System.out.println(
"Statistics"
);
67
System.out.printf(
" count: %,d%n"
, stats.getCount());
68
System.out.printf(
" sum: %,d%n"
, stats.getSum());
69
System.out.printf(
" min: %,d%n"
, stats.getMin());
70
System.out.printf(
" max: %,d%n"
, stats.getMax());
Fig. 23.29
|
Comparing performance of sequential and parallel stream operations. (Part 2 of 3.)