44import java .time .Year ;
55import java .time .YearMonth ;
66import java .time .temporal .WeekFields ;
7- import java .util .Comparator ;
7+ import java .util .LinkedHashMap ;
88import java .util .List ;
99import java .util .Locale ;
1010import java .util .Map ;
11+ import java .util .Objects ;
1112import java .util .function .BooleanSupplier ;
12- import java .util .function .Function ;
1313import java .util .function .Supplier ;
1414import java .util .stream .Collectors ;
1515
@@ -71,7 +71,7 @@ public void deleteMemes(MemesServiceDto memesServiceDto) {
7171 }
7272
7373 private Memes findMemberMemes (MemesServiceDto memesServiceDto ) {
74- Memes memes = findMemesFromMemesId (memesServiceDto .getMemesId ());
74+ Memes memes = this . findMemesFromMemesId (memesServiceDto .getMemesId ());
7575
7676 Member loginMember = memberService .findMemberFromEmail (memesServiceDto .getEmail ());
7777 Member memesMember = memes .getMember ();
@@ -135,10 +135,8 @@ public List<MemesInfoResponse> findMonthlyTop10Memes(YearMonth yearMonth) {
135135 });
136136 }
137137
138- private List <MemesInfoResponse > findTop10MemesFromRanking (
139- Supplier <List <MemesRankDto >> cacheSupplier ,
140- BooleanSupplier isCurrentPeriodChecker ,
141- Supplier <List <MemesRankDto >> dbSupplierWithEvent ) {
138+ private List <MemesInfoResponse > findTop10MemesFromRanking (Supplier <List <MemesRankDto >> cacheSupplier ,
139+ BooleanSupplier isCurrentPeriodChecker , Supplier <List <MemesRankDto >> dbSupplierWithEvent ) {
142140
143141 List <MemesRankDto > rankList = cacheSupplier .get ();
144142
@@ -150,13 +148,28 @@ private List<MemesInfoResponse> findTop10MemesFromRanking(
150148 }
151149
152150 Map <Long , MemesRankDto > rankMap = rankList .stream ()
153- .collect (Collectors .toMap (MemesRankDto ::getMemesId , Function .identity ()));
151+ .collect (Collectors .toMap (
152+ MemesRankDto ::getMemesId ,
153+ e -> e ,
154+ (a , b ) -> b ,
155+ LinkedHashMap ::new
156+ ));
154157
155158 List <Memes > memes = memesRepository .findMemesByIdIn (rankMap .keySet ());
156159
157- return memes .stream ().map (m -> {
158- MemesRankDto dto = rankMap .get (m .getId ());
159- return MemesInfoResponse .fromMemesAndLikeCount (m , dto .getScore ());
160- }).sorted (Comparator .comparing (MemesInfoResponse ::getLikeCount ).reversed ()).limit (10 ).toList ();
160+ Map <Long , Memes > memesMap = memes .stream ()
161+ .collect (Collectors .toMap (Memes ::getId , meme -> meme ));
162+
163+ return rankMap .entrySet ().stream ()
164+ .map (entry -> {
165+ Long id = entry .getKey ();
166+ Memes meme = memesMap .get (id );
167+ if (meme == null )
168+ return null ;
169+ return MemesInfoResponse .fromMemesAndLikeCount (meme , entry .getValue ().getScore ());
170+ })
171+ .filter (Objects ::nonNull )
172+ .limit (10 )
173+ .toList ();
161174 }
162- }
175+ }
0 commit comments