>  기사  >  Java  >  `Collectors.groupingBy()`를 사용하여 Java 8에서 여러 필드로 데이터를 그룹화하려면 어떻게 해야 합니까?

`Collectors.groupingBy()`를 사용하여 Java 8에서 여러 필드로 데이터를 그룹화하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-24 10:27:11647검색

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

단일 필드 그룹화를 넘어 Java 8의 여러 필드로 그룹화

객체를 단일 필드로 그룹화하는 것은 데이터 처리에서 일반적인 작업입니다. 그러나 여러 필드별로 그룹화해야 하는 경우 시나리오가 발생할 수 있습니다. 제공된 초기 코드 조각은 연령 필드별로 그룹화하는 방법을 보여줍니다. 이 문서에서는 동일한 POJO의 여러 필드를 기준으로 그룹화하는 옵션에 대해 자세히 설명합니다.

컬렉터 연결

간단한 접근 방식은 여러 컬렉터를 연결하는 것입니다. 아래 코드는 이 기술을 보여줍니다.

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

이 접근 방식을 사용하여 Fred라는 18세 개인 목록을 검색합니다.

map.get("Fred").get(18);

그룹화 기록 정의

그룹화를 나타내는 클래스를 만드는 것도 또 다른 방법입니다. 여기서는 이름과 나이의 조합을 나타내는 데 레코드가 활용됩니다.

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

그룹화된 데이터 내에서 검색하려면:

map.get(new NameAge("Fred", 18));

프레임워크에서 쌍 클래스 사용 라이브러리

Apache Commons와 같은 라이브러리는 이러한 유형의 시나리오에 대한 쌍 클래스를 제공합니다. 쌍 클래스를 사용하면 맵의 키를 다음과 같이 구성할 수 있습니다.

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

맵에서 검색하려면:

map.get(Pair.of("Fred", 18));

결론

Java 8의 Collectors.groupingBy() 메소드는 데이터 그룹화에 유연성을 제공합니다. 이 기사에서는 체인 수집기, 사용자 정의 그룹화 레코드 정의, 프레임워크 라이브러리의 쌍 클래스 활용 등 단일 필드 이상으로 그룹화를 확장하는 다양한 접근 방식을 보여주었습니다. 또한 Java의 레코드를 사용하면 사용자 정의 클래스 없이도 그룹화 기준을 더 쉽게 정의할 수 있습니다.

위 내용은 `Collectors.groupingBy()`를 사용하여 Java 8에서 여러 필드로 데이터를 그룹화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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