DoubleSummaryStatistics is an object for collecting statistics such as count, min, max, sum, and average. Although not required, it is designed to work with streams. If you are working with longs use LongSummaryStatistics or ints use IntSummaryStatistics .
Setup
class Company {
double revenue;
public Company(double revenue) {
super();
this.revenue = revenue;
}
public double getRevenue() {
return revenue;
}
}
List<Company> companies;
@Before
public void setUp() {
companies = new ArrayList<>();
companies.add(new Company(100.12));
companies.add(new Company(142.65));
companies.add(new Company(12.1));
companies.add(new Company(184.90));
}
Java 8
Compute summary statistics on a stream
@Test
public void double_summary_stats_with_stream() {
DoubleSummaryStatistics stats = companies.stream()
.mapToDouble((x) -> x.getRevenue()).summaryStatistics();
// average
assertEquals(109.9425, stats.getAverage(), 0);
// count
assertEquals(4, stats.getCount(), 0);
// max
assertEquals(184.9, stats.getMax(), 0);
// min
assertEquals(12.1, stats.getMin(), 0);
// sum
assertEquals(439.77, stats.getSum(), 0);
}
DoubleSummaryStatistics as a reduction target
@Test
public void double_summary_stats_stream_reduction_target() {
DoubleSummaryStatistics stats = companies.stream().collect(
Collectors.summarizingDouble(Company::getRevenue));
// average
assertEquals(109.9425, stats.getAverage(), 0);
// count
assertEquals(4, stats.getCount(), 0);
// max
assertEquals(184.9, stats.getMax(), 0);
// min
assertEquals(12.1, stats.getMin(), 0);
// sum
assertEquals(439.77, stats.getSum(), 0);
}