Java 8流,按国家/地区获取平均年龄

7 java-8 java-stream

我正试图在java 8上进行函数式编程

用户类

public class User {
    private String name;
    private Country country;
    private int age;
    // setters - getters
}
Run Code Online (Sandbox Code Playgroud)

国家级

public class Country {
    private String name;
    private int population;
    //setters - getters
}
Run Code Online (Sandbox Code Playgroud)

现在我希望按国家/地区获得用户的平均年龄,基本上是Map<String, Double>.我可以通过迭代用户列表以旧方式完成它.但是我想以某种functional方式实现它stream.我知道collectgroupingBy.

我试过 users.stream().collect(Collectors.groupingBy(user -> user.getCountry()));Map<String, List<User>>.无法弄清楚如何进行平均部分.

Eug*_*ene 8

添加第二个参数 groupingBy

Map<String, Double> map = users
    .stream()
    .collect(Collectors.groupingBy(
           user -> user.getCountry().getName(),
           Collectors.averagingInt(User::getAge)));
Run Code Online (Sandbox Code Playgroud)