[Java] Collectors.groupingBy() 사용하기

sinryuji·2025년 2월 18일

오늘 Java stream을 사용하다가 유용한 Collectors 함수를 발견했다! 정말 stream의 세계는 끝이 없다...

Collectors.groupingBy()

  • groupingBy(): Map 리턴.
  • groupingByConcurrent(): ConcurrentMap 리턴.

groupingBy()는 특정 키로 요소를 grouping 해서 Map으로 만들어주는 함수이다.

  • 매개 변수: Function<T, K> classifier
  • 리턴 타입: Collector<T, ?, Map<K, List<T>>>

T를 K로 매핑해서 K가 키, List<T>가 밸류인 Map을 반환한다.

예시

Map<UUID, List<MenuOption>> optionMap = 
	menuOptionRepository.findAllByIdIn(optionIdList)
    .stream()
    .collect(Collectors.groupingBy(op -> op.getMenu().getId()));

DB에서 opionIdList를 통해 MenuOption을 몽땅 불러온 후 각 메뉴마다 해당하는 메뉴의 옵션들, 즉 MenuOpion의 리스트를 할당해야 하는 상황이다.

원래라면 opionIdList를 순회하며 메뉴의 id가 Map에 없으면 List 초기화 후 삽입, 있으면 그냥 삽입하는 로직을 짜야하지만 위와 같이 간단하게 처리가 가능하다.

profile
응애 개발자입니다.

0개의 댓글