단일 필드 그룹화를 넘어 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!