|
6 | 6 | import java.time.format.DateTimeFormatter; |
7 | 7 | import java.time.temporal.ChronoUnit; |
8 | 8 | import java.util.ArrayList; |
| 9 | +import java.util.Arrays; |
9 | 10 | import java.util.Collections; |
10 | 11 | import java.util.Comparator; |
11 | | -import java.util.HashMap; |
| 12 | +import java.util.LinkedHashMap; |
12 | 13 | import java.util.List; |
13 | 14 | import java.util.Map; |
14 | 15 | import java.util.stream.Collectors; |
@@ -102,20 +103,31 @@ public WeatherDetail getWeatherDetail(Long placeId, int date, int hour) { |
102 | 103 | } |
103 | 104 |
|
104 | 105 | private List<String> getRecommendActivities(Weather weather, List<TideRecord> tideRecords) { |
105 | | - Map<Activity, Integer> activityScores = new HashMap<>(); |
| 106 | + List<Activity> activities = Arrays.asList( |
| 107 | + SNORKELING, |
| 108 | + SWIMMING, |
| 109 | + DIVING, |
| 110 | + SURFING, |
| 111 | + PADDlING |
| 112 | + ); |
| 113 | + |
| 114 | + Map<Activity, Integer> activityScores = new LinkedHashMap<>(); |
106 | 115 |
|
107 | | - activityScores.put(SNORKELING, calculateSnorkelingScore(weather, tideRecords)); |
108 | | - activityScores.put(SWIMMING, calculateSwimmingScore(weather, tideRecords)); |
109 | | - activityScores.put(DIVING, calculateDivingScore(weather, tideRecords)); |
110 | | - activityScores.put(PADDlING, calculatePaddlingScore(weather, tideRecords)); |
111 | | - activityScores.put(SURFING, calculateSurfingScore(weather, tideRecords)); |
| 116 | + for (Activity activity : activities) { |
| 117 | + int score = calculateActivityScore(activity, weather, tideRecords); |
| 118 | + activityScores.put(activity, score); |
| 119 | + } |
112 | 120 |
|
113 | 121 | int maxScore = Collections.max(activityScores.values()); |
114 | 122 |
|
115 | | - return activityScores.entrySet().stream() |
| 123 | + List<String> recommendedActivities = activityScores.entrySet().stream() |
116 | 124 | .filter(entry -> entry.getValue() == maxScore) |
117 | 125 | .map(entry -> entry.getKey().getValue()) |
118 | 126 | .collect(Collectors.toList()); |
| 127 | + |
| 128 | + return recommendedActivities.size() > 1 |
| 129 | + ? recommendedActivities.subList(0, 2) |
| 130 | + : recommendedActivities; |
119 | 131 | } |
120 | 132 |
|
121 | 133 | // Calculate Point |
@@ -636,5 +648,16 @@ private LocalDateTime toLocalDateTime(int date, int hour) { |
636 | 648 | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHH"); |
637 | 649 | return LocalDateTime.parse(dateTimeString, formatter); |
638 | 650 | } |
| 651 | + |
| 652 | + private int calculateActivityScore(Activity activity, Weather weather, List<TideRecord> tideRecords) { |
| 653 | + return switch (activity) { |
| 654 | + case SNORKELING -> calculateSnorkelingScore(weather, tideRecords); |
| 655 | + case SWIMMING -> calculateSwimmingScore(weather, tideRecords); |
| 656 | + case DIVING -> calculateDivingScore(weather, tideRecords); |
| 657 | + case SURFING -> calculateSurfingScore(weather, tideRecords); |
| 658 | + case PADDlING -> calculatePaddlingScore(weather, tideRecords); |
| 659 | + default -> 0; |
| 660 | + }; |
| 661 | + } |
639 | 662 | } |
640 | 663 |
|
0 commit comments