오늘 Java stream을 사용하다가 유용한 Collectors 함수를 발견했다! 정말 stream의 세계는 끝이 없다...
groupingBy(): Map 리턴.groupingByConcurrent(): ConcurrentMap 리턴.groupingBy()는 특정 키로 요소를 grouping 해서 Map으로 만들어주는 함수이다.
Function<T, K> classifierCollector<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 초기화 후 삽입, 있으면 그냥 삽입하는 로직을 짜야하지만 위와 같이 간단하게 처리가 가능하다.