@@ -156,14 +156,34 @@ public List<StoreMapResponseDTO> getStores(MapRequestDTO viewport, Long memberId
156156 return storesWithActivePaper .stream ().map (s -> {
157157 final List <Paper > sPapers = papersByStore .get (s .getId ());
158158
159- List <StoreMapResponseDTO .PartnershipInfo > partnerships = sPapers .stream ()
160- .map (paper -> {
161- Long adminId = paper .getAdmin () != null ? paper .getAdmin ().getId () : null ;
162- String adminName = paper .getAdmin () != null ? paper .getAdmin ().getName () : null ;
163- String benefit = resolveBenefit (contentByPaperId .get (paper .getId ()));
164- return new StoreMapResponseDTO .PartnershipInfo (adminId , adminName , benefit );
159+ // admin별로 그룹화해서 benefits 리스트 생성
160+ Map <Long , List <String >> benefitsByAdmin = sPapers .stream ()
161+ .collect (Collectors .groupingBy (
162+ paper -> paper .getAdmin ().getId (),
163+ Collectors .mapping (
164+ paper -> {
165+ PaperContent content = contentByPaperId .get (paper .getId ());
166+ return resolveBenefit (content );
167+ },
168+ Collectors .filtering (
169+ benefit -> benefit != null && !benefit .isBlank (),
170+ Collectors .toList ()
171+ )
172+ )
173+ ));
174+
175+ List <StoreMapResponseDTO .PartnershipInfo > partnerships = benefitsByAdmin .entrySet ().stream ()
176+ .map (entry -> {
177+ Long adminId = entry .getKey ();
178+ List <String > benefits = entry .getValue ();
179+ String adminName = sPapers .stream ()
180+ .filter (p -> p .getAdmin ().getId ().equals (adminId ))
181+ .findFirst ()
182+ .map (p -> p .getAdmin ().getName ())
183+ .orElse (null );
184+ return new StoreMapResponseDTO .PartnershipInfo (adminId , adminName , benefits );
165185 })
166- .filter (p -> p .adminId () != null )
186+ .filter (p -> p .adminId () != null && ! p . benefits (). isEmpty () )
167187 .toList ();
168188
169189 return StoreMapResponseDTO .ofWithPartnerships (s , partnerships , amazonS3Manager );
@@ -255,15 +275,34 @@ public List<StoreMapResponseDTO> searchStores(String keyword) {
255275 return storesWithActivePaper .stream ().map (s -> {
256276 List <Paper > storePapers = papersByStore .getOrDefault (s .getId (), List .of ());
257277
258- List <StoreMapResponseDTO .PartnershipInfo > partnerships = storePapers .stream ()
259- .map (paper -> {
260- Long adminId = paper .getAdmin () != null ? paper .getAdmin ().getId () : null ;
261- String adminName = paper .getAdmin () != null ? paper .getAdmin ().getName () : null ;
262- PaperContent content = contentByPaperId .get (paper .getId ());
263- String benefit = resolveBenefit (content );
264- return new StoreMapResponseDTO .PartnershipInfo (adminId , adminName , benefit );
278+ // admin별로 그룹화해서 benefits 리스트 생성
279+ Map <Long , List <String >> benefitsByAdmin = storePapers .stream ()
280+ .collect (Collectors .groupingBy (
281+ paper -> paper .getAdmin ().getId (),
282+ Collectors .mapping (
283+ paper -> {
284+ PaperContent content = contentByPaperId .get (paper .getId ());
285+ return resolveBenefit (content );
286+ },
287+ Collectors .filtering (
288+ benefit -> benefit != null && !benefit .isBlank (),
289+ Collectors .toList ()
290+ )
291+ )
292+ ));
293+
294+ List <StoreMapResponseDTO .PartnershipInfo > partnerships = benefitsByAdmin .entrySet ().stream ()
295+ .map (entry -> {
296+ Long adminId = entry .getKey ();
297+ List <String > benefits = entry .getValue ();
298+ String adminName = storePapers .stream ()
299+ .filter (p -> p .getAdmin ().getId ().equals (adminId ))
300+ .findFirst ()
301+ .map (p -> p .getAdmin ().getName ())
302+ .orElse (null );
303+ return new StoreMapResponseDTO .PartnershipInfo (adminId , adminName , benefits );
265304 })
266- .filter (p -> p .adminId () != null )
305+ .filter (p -> p .adminId () != null && ! p . benefits (). isEmpty () )
267306 .toList ();
268307
269308 return StoreMapResponseDTO .ofWithPartnerships (s , partnerships , amazonS3Manager );
0 commit comments