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

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

Susan Sarandon
Susan SarandonOriginal
2024-11-24 16:28:12950browse

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

Grouping by Multiple Fields in Java 8

In Java 8, the Collectors.groupingBy() method is commonly used to group objects based on a specific field. However, what if you need to group by multiple fields from the same POJO?

There are several options available:

Chaining Collectors

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

This code groups the Person objects first by name and then by age, resulting in a nested map structure.

Defining a Grouping Class

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));

By creating a record or class that encapsulates the grouping criteria (e.g., NameAge), you can directly group by the desired fields.

Using a Pair Class

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())));

If you're using a third-party library, you can leverage its pair class to represent the grouping criteria.

Choosing the Best Option

The choice of approach depends on the specific requirements of your project:

  • If you need a simple and straightforward way to group by multiple fields, chaining collectors is a pragmatic solution.
  • If you prefer a more encapsulated approach that makes the grouping intention explicit, defining a grouping class or using a pair class is recommended.
  • The availability of records in Java versions >= 16 simplifies the creation of grouping classes, making it a preferred choice for clarity and maintainability.

The above is the detailed content of How to Group by Multiple Fields in Java 8 Using `Collectors.groupingBy()`?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn