|
|
@@ -746,6 +746,7 @@ public class BeijingNutritionService {
|
|
|
|
|
|
List<ScoredIngredient> result = new ArrayList<>();
|
|
|
Map<String, Integer> categoryCount = new HashMap<>();
|
|
|
+ Set<Long> selectedIds = new HashSet<>();
|
|
|
int targetMin = 10, targetMax = 12;
|
|
|
|
|
|
for (Map.Entry<String, CategoryQuota> entry : CATEGORY_QUOTA.entrySet()) {
|
|
|
@@ -755,18 +756,18 @@ public class BeijingNutritionService {
|
|
|
|
|
|
List<ScoredIngredient> catCandidates = scored.stream()
|
|
|
.filter(s -> cat.equals(s.category))
|
|
|
- .filter(s -> !result.contains(s))
|
|
|
+ .filter(s -> !selectedIds.contains(s.foodId))
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
int take = Math.min(max, catCandidates.size());
|
|
|
for (int i = 0; i < take; i++) {
|
|
|
result.add(catCandidates.get(i));
|
|
|
+ selectedIds.add(catCandidates.get(i).foodId);
|
|
|
}
|
|
|
categoryCount.put(cat, take);
|
|
|
}
|
|
|
|
|
|
if (result.size() < targetMin) {
|
|
|
- Set<Long> selectedIds = result.stream().map(s -> s.foodId).collect(Collectors.toSet());
|
|
|
List<ScoredIngredient> remaining = scored.stream()
|
|
|
.filter(s -> !selectedIds.contains(s.foodId))
|
|
|
.collect(Collectors.toList());
|