首页 > Java > java教程 > 如何在 Java 8 中使用 Collectors.groupingBy() 按多个字段对对象进行分组?

如何在 Java 8 中使用 Collectors.groupingBy() 按多个字段对对象进行分组?

Mary-Kate Olsen
发布: 2024-11-28 07:39:11
原创
742 人浏览过

How to Group Objects by Multiple Fields in Java 8 Using Collectors.groupingBy()?

Java 8 中按多个字段对对象进行分组

Java 8 中的 Collectors.groupingBy() 方法是一个强大的工具,用于根据在单个字段上。但是,在某些情况下,您可能需要同时按多个字段对对象进行分组。

要按多个字段进行分组,您有多种选择:

链接收集器

您可以链接多个收集器以按顺序按不同字段进行分组。例如,要按姓名分组,然后按年龄分组,您可以使用以下代码:

Map<String, Map<Integer, List<Person>>> map = people
    .collect(Collectors.groupingBy(Person::getName,
        Collectors.groupingBy(Person::getAge)));
登录后复制

定义组记录

或者,您可以定义一个组记录

class Person {
    record NameAge(String name, int age) { }
    public NameAge getNameAge() { return new NameAge(name, age); }
}
登录后复制

代表分组标准的类。例如,您可以创建一个封装姓名和年龄字段的 NameAge 记录:

Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
登录后复制

然后,您可以使用以下方法按 NameAge 记录进行分组:

使用配对课程

Map<Pair<String, Integer>, List<Person>> map =
    people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
登录后复制

如果您不想实现自己的团体记录,您可以使用配对课程由 Apache Commons Pair 等 Java 框架提供。使用 Pair 按姓名和年龄进行分组:

结论

链接收集器、定义组记录和利用 Pair 类都是对对象进行分组的可行方法Java 8 中有多个字段。选择取决于您的具体需求和偏好。

以上是如何在 Java 8 中使用 Collectors.groupingBy() 按多个字段对对象进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板