小编jpf*_*ire的帖子

使用Collectors.groupingBy创建复杂对象

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)

java lambda mapreduce java-8

3
推荐指数
1
解决办法
6754
查看次数

标签 统计

java ×1

java-8 ×1

lambda ×1

mapreduce ×1