Reputation: 3328
I have a stopwatch class that measures the time it takes to produce reports:
public class Stopwatch {
public String report;
public Instant startTime;
public Instant endTime;
public Duration duration;
}
While reports are run the timings and duration are gathered:
private ArrayList<Stopwatch> _reportStats;
In the end I'd like to know the total duration for all the reports such as:
Duration total = Duration.ZERO; // was null;
for (Stopwatch s: _reportStats) {
total = total.plus(s.duration);
}
Except I'd like to use a stream and a reduce but I can't get the syntax correct:
Duration total = _reportStats.stream().reduce(... syntax ...);
Upvotes: 1
Views: 56
Reputation: 32036
You can use reduce
with an identity value (Duration.ZERO
) for sum, and define Duration.plus
as the accumulator :
Duration total = _reportStats.stream()
.map(Stopwatch::getDuration)
.reduce(Duration.ZERO, Duration::plus);
Upvotes: 3