在oracle的简化教程中,可以使用Stream.collect计算流中的平均年龄:
Averager averageCollect = roster.stream()
.filter(p -> p.getGender() == Person.Sex.MALE)
.map(Person::getAge)
.collect(Averager::new, Averager::accept, Averager::combine);
Run Code Online (Sandbox Code Playgroud)
但是如果想要创建一个Map<Person.Sex, Averager>使用lambda + groupingBy而不是简单的平均值,如教程结尾所示:
Map<Person.Sex, Integer> totalAgeByGender =
roster
.stream()
.collect(
Collectors.groupingBy(
Person::getGender,
Collectors.reducing(
0,
Person::getAge,
Integer::sum)));
Run Code Online (Sandbox Code Playgroud)