인프런 커뮤니티 질문&답변

임도현님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V6: JPA에서 DTO로 직접 조회, 플랫 데이터 최적화

gropingBy 에 관하여입니다.

작성

·

405

5

     Set<Map.Entry<OrderQueryDto, List<OrderItemQueryDto>>> entries = flats.stream()
                .collect(groupingBy(o ->  new OrderQueryDto(o.getOrderId(), o.getName(),
                                o.getOrderDate(), o.getOrderStatus(), o.getAddress()),
                        mapping(o -> new OrderItemQueryDto(o.getOrderId(),
                                o.getItemName(), o.getOrderPrice(), o.getCount()), toList())))
                .entrySet();

여기서 OrderQueryDto 와 Map 의 키(groupingby 의 classifier)가  되는 것 같은데 아무리 구글링해봐도 객체인경우에는  @EqualsAndHashCode를 통해 여러 필드중 특정 필드를 지정해줘야한다? 이런말을 못 찾겠습니다...

질문도 좀 이상한것 같은데 제가 궁금한것은 어떤 키워드나 사이트를 참조해서 공부해야하는지 입니다...

찾아본 예시들도 다 그냥 일반적인 경우라
어떻게 equalshashcode를 알려줘야하는지  원천? 을 알고싶습니다.

답변 2

1

임도현님의 프로필 이미지
임도현
질문자

늦은시간 감사합니다! Map 이 키가 같은지 비교할때 hash(key)를 비교하는데 

@EqualsAndHashCode of("orderid") 를 해주면 orderid로만 equals 함수와 hash함수를 오버라이딩 해줘서

mapping이 루프를 돌때 key가 같은것으로 인식하여서 orderItems가 처음처럼 따로 안생기고 같이 묶인다고 이해하면 맞나요?

김영한님의 프로필 이미지
김영한
지식공유자

네 맞습니다^^

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 도현님

다음 블로그에서 2.3. 복잡한 맵 키 유형으로 그룹화 부분을 보시면 도움이 되실거에요.

https://recordsoflife.tistory.com/55

또는 여기도요. https://gem1n1.tistory.com/159

감사합니다.