Skip to content

Commit 412a039

Browse files
committed
1_opt_2_HW0_cycles
1 parent 224552a commit 412a039

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

src/main/java/ru/javawebinar/topjava/util/MealsUtil.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
import java.time.LocalDateTime;
88
import java.time.LocalTime;
99
import java.time.Month;
10-
import java.util.Arrays;
11-
import java.util.List;
12-
import java.util.Map;
10+
import java.util.*;
1311
import java.util.stream.Collectors;
1412

13+
import static ru.javawebinar.topjava.util.TimeUtil.isBetweenHalfOpen;
14+
1515
public class MealsUtil {
1616
public static void main(String[] args) {
1717
List<Meal> meals = Arrays.asList(
@@ -24,8 +24,13 @@ public static void main(String[] args) {
2424
new Meal(LocalDateTime.of(2020, Month.JANUARY, 31, 20, 0), "Ужин", 410)
2525
);
2626

27-
List<MealTo> mealsTo = filteredByStreams(meals, LocalTime.of(7, 0), LocalTime.of(12, 0), 2000);
27+
final LocalTime startTime = LocalTime.of(7, 0);
28+
final LocalTime endTime = LocalTime.of(12, 0);
29+
30+
List<MealTo> mealsTo = filteredByStreams(meals, startTime, endTime, 2000);
2831
mealsTo.forEach(System.out::println);
32+
33+
System.out.println(filteredByCycles(meals, startTime, endTime, 2000));
2934
}
3035

3136
public static List<MealTo> filteredByStreams(List<Meal> meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) {
@@ -36,11 +41,25 @@ public static List<MealTo> filteredByStreams(List<Meal> meals, LocalTime startTi
3641
);
3742

3843
return meals.stream()
39-
.filter(meal -> TimeUtil.isBetweenHalfOpen(meal.getTime(), startTime, endTime))
44+
.filter(meal -> isBetweenHalfOpen(meal.getTime(), startTime, endTime))
4045
.map(meal -> createTo(meal, caloriesSumByDate.get(meal.getDate()) > caloriesPerDay))
4146
.collect(Collectors.toList());
4247
}
4348

49+
public static List<MealTo> filteredByCycles(List<Meal> meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) {
50+
51+
final Map<LocalDate, Integer> caloriesSumByDate = new HashMap<>();
52+
meals.forEach(meal -> caloriesSumByDate.merge(meal.getDate(), meal.getCalories(), Integer::sum));
53+
54+
final List<MealTo> mealsTo = new ArrayList<>();
55+
meals.forEach(meal -> {
56+
if (isBetweenHalfOpen(meal.getTime(), startTime, endTime)) {
57+
mealsTo.add(createTo(meal, caloriesSumByDate.get(meal.getDate()) > caloriesPerDay));
58+
}
59+
});
60+
return mealsTo;
61+
}
62+
4463
private static MealTo createTo(Meal meal, boolean excess) {
4564
return new MealTo(meal.getDateTime(), meal.getDescription(), meal.getCalories(), excess);
4665
}

0 commit comments

Comments
 (0)