java - 在java lambda表达式中使用groupingBy时如何获取id列表

标签 java lambda grouping aggregate

假设我们有一个对象User:

public class User {
    private Integer id;
    private Integer age;
    private String name;
    private String family;

    public User() {}

    public User(Integer id, Integer age, String name, String family) {
        this.id = id;
        this.age = age;
        this.name = name;
        this.family = family;
    }

    // getters and setters emited for brevity
}

我编写了如下所示的 lambda 表达式,以根据对某些字段进行分组来获取对象的平均年龄:

public static void main(String[] args) {
    List<User> allUsers = new ArrayList<>();

    allUsers.add(new User(1, 25, "Rasool", "Ghafari"));
    allUsers.add(new User(2, 27, "Ali", "Sohrabi"));
    allUsers.add(new User(3, 25, "Ali", "Azizkhani"));
    allUsers.add(new User(4, 25, "Rasool", "Asadi"));
    allUsers.add(new User(5, 27, "Ali", "Rasooli Sa'd Abad"));
    allUsers.add(new User(6, 26, "Rasool", "Ameri"));

    Map<List<Object>, Long> groupedResult = 
        allUsers.stream().collect(
            groupingBy(
                u -> Arrays.asList(u.getName()),
                averagingDouble(User::getAge)
            )
        );

    // result:
    // {[Rasool] = 25.33, [Ali] = 26.33}
}

现在,我想在这个 lambda 中添加一些东西,但不知道该怎么做。我想获取每个组中分组对象的id列表,可能是这样的:

// {[Rasool, [1, 4, 6]] = 25.33, [Ali, [2, 3, 5]] = 26.33}

最佳答案

一点点改变就足够了:

Map<List<Object>, List<User>> groupedResult =
        allUsers.stream().collect(
                groupingBy(
                        u -> Arrays.asList(u.getName(), u.getAge()),
                        Collectors.toList()
                )
        );

关于java - 在java lambda表达式中使用groupingBy时如何获取id列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041062/

相关文章:

java - 谷歌应用引擎: how to add information to the connect/disconnect channel "ping"s?

java - getAccount JHipster 6.0.1 中未识别 OAuth2AuthenticationToken

python - cython lambda1 与 <lambda>

jquery - 是否存在使用 jqGrid 按需分组的解决方案?

java - Android TextView OnClick-Event 不起作用

java - Apache Tomcat - 显示自定义错误消息,如 "You have typed an invalid url"而不是显示 "HTTP Status 404 – Not Found"

lambda - 比较器作为 lambda

python-2.7 - Python - 列表理解中的 lambda 给出了错误的结果

grouping - IgGrid - 如何在代码中执行多个分组?

r - 使用特定列表对数据帧 R 中的变量进行分组