首页  >  文章  >  Java  >  如何使用'Collectors.groupingBy()”在 Java 8 中按多个字段进行分组?

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

Susan Sarandon
Susan Sarandon原创
2024-11-24 16:28:12950浏览

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

Java 8 中按多个字段分组

在 Java 8 中,Collectors.groupingBy() 方法通常用于根据一个特定的领域。但是,如果您需要按同一 POJO 中的多个字段进行分组怎么办?

有多种可用选项:

链接收集器

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

此代码首先按名称然后按年龄对 Person 对象进行分组,从而产生嵌套映射

定义分组类

class Person {
    record NameAge(String name, int age) { }

    public NameAge getNameAge() {
        return new NameAge(name, age);
    }
}

Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));

通过创建封装分组条件(例如NameAge)的记录或类,您可以直接按分组所需字段。

使用一对类

import org.apache.commons.lang3.tuple.Pair;

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

如果您使用的是第三方库,您可以利用其pair类来表示分组标准。

选择最佳选项

方法的选择取决于您的具体要求项目:

  • 如果您需要一种简单直接的方法来按多个字段进行分组,链接收集器是一个实用的解决方案。
  • 如果您更喜欢更封装的方法来实现分组意图显式地,建议定义分组类或使用pair类。
  • Java版本> = 16中记录的可用性简化了创建分组类,使其成为清晰度和可维护性的首选。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn