Home > Java > javaTutorial > 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
Release: 2024-11-24 16:28:12
Original
1030 people have browsed it

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));
Copy after login

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));
Copy after login

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())));
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template