@@ -20,32 +20,34 @@ public List<KeywordMatchResult> matchKeyword(
2020 Set <KeywordMatchResult > keywordMatchResults = new HashSet <>();
2121
2222 for (Article article : articles ) {
23- String title = article .getTitle ();
24-
2523 for (ArticleKeywordUserMap articleKeywordUserMap : articleKeywordUserMaps ) {
26- if (Objects .equals (articleKeywordUserMap .getUserId (), authorId )) {
27- continue ;
28- }
29-
30- String keyword = articleKeywordUserMap .getKeyword ();
31- if (!title .contains (keyword )) {
32- continue ;
24+ if (isMatchable (article , articleKeywordUserMap , authorId )) {
25+ addOrUpdateResult (keywordMatchResults , article , articleKeywordUserMap );
3326 }
34-
35- KeywordMatchResult keywordMatchResult = KeywordMatchResult .of (
36- article .getId (), articleKeywordUserMap .getUserId (), keyword
37- );
38-
39- keywordMatchResults .stream ()
40- .filter (result -> result .equals (keywordMatchResult ))
41- .findFirst ()
42- .ifPresentOrElse (
43- existing -> existing .updateKeywordIfLonger (keyword ),
44- () -> keywordMatchResults .add (keywordMatchResult )
45- );
4627 }
4728 }
4829
4930 return keywordMatchResults .stream ().toList ();
5031 }
32+
33+ private boolean isMatchable (Article article , ArticleKeywordUserMap articleKeywordUserMap , Integer authorId ) {
34+ return !Objects .equals (articleKeywordUserMap .getUserId (), authorId )
35+ && article .getTitle ().contains (articleKeywordUserMap .getKeyword ());
36+ }
37+
38+ private void addOrUpdateResult (
39+ Set <KeywordMatchResult > results , Article article , ArticleKeywordUserMap userMap
40+ ) {
41+ KeywordMatchResult keywordMatchResult = KeywordMatchResult .of (
42+ article .getId (), userMap .getUserId (), userMap .getKeyword ()
43+ );
44+
45+ results .stream ()
46+ .filter (result -> result .equals (keywordMatchResult ))
47+ .findFirst ()
48+ .ifPresentOrElse (
49+ existing -> existing .updateKeywordIfLonger (userMap .getKeyword ()),
50+ () -> results .add (keywordMatchResult )
51+ );
52+ }
5153}
0 commit comments