>Java >java지도 시간 >`Collectors.groupingBy()`를 사용하여 Java 8에서 여러 필드를 그룹화하는 방법은 무엇입니까?

`Collectors.groupingBy()`를 사용하여 Java 8에서 여러 필드를 그룹화하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-24 16:28:121032검색

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

Java 8에서 여러 필드로 그룹화

Java 8에서 Collectors.groupingBy() 메서드는 일반적으로 다음을 기반으로 개체를 그룹화하는 데 사용됩니다. 특정 분야. 그러나 동일한 POJO에서 여러 필드별로 그룹화해야 하는 경우에는 어떻게 해야 할까요?

사용 가능한 여러 옵션이 있습니다:

Chaining Collectors

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

타사 라이브러리를 사용하는 경우 쌍 클래스를 활용하여 그룹화 기준을 나타낼 수 있습니다.

최적의 옵션 선택

접근 방식 선택은 고객의 특정 요구 사항에 따라 다릅니다. 프로젝트:

  • 여러 필드별로 그룹화하는 간단하고 간단한 방법이 필요한 경우 수집기를 연결하는 것이 실용적인 솔루션입니다.
  • 그룹화 의도를 만드는 보다 캡슐화된 접근 방식을 선호하는 경우 명시적으로 그룹화 클래스를 정의하거나 쌍 클래스를 사용하는 것이 좋습니다.
  • Java 버전 >= 16에서 레코드의 가용성은 단순화됩니다. 그룹화 클래스를 생성하여 명확성과 유지 관리 가능성을 위해 선호되는 선택입니다.

위 내용은 `Collectors.groupingBy()`를 사용하여 Java 8에서 여러 필드를 그룹화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.