From 572d0459e0c109ad051119757ef65d11b70f6302 Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Tue, 18 Feb 2020 11:51:18 +0300 Subject: [PATCH 1/4] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 228b708b7094..ab4d97e44213 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,9 @@ Java Enterprise Online Project - Выполнить задание и залить на GitHub (commit + push) - Переключиться в основную ветку проекта master. +## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Тех.задание: библия или допускаются изменения. Полуоткрытый интервал.](https://drive.google.com/file/d/123XyBYVeKLC3ZcRr_dUkwyvO9NC6WLkY/view?usp=sharing) +- [Типы промежутков](https://ru.wikipedia.org/wiki/Промежуток_(математика)) + ## ![hw](https://cloud.githubusercontent.com/assets/13649199/13672719/09593080-e6e7-11e5-81d1-5cb629c438ca.png) Домашнее задание HW0 ``` Реализовать метод `UserMealsUtil.filteredByCycles` через циклы (`forEach`): From 796d81b362a3e087d016e90e503fe208eb55740b Mon Sep 17 00:00:00 2001 From: Java Online Projects Date: Thu, 5 Mar 2020 23:56:35 +0300 Subject: [PATCH 2/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ab4d97e44213..6b840eac3b03 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ Java Enterprise Online Project #### Java (базовые вещи) - Интуит. Программирование на Java - 1й урок MasterJava: Многопоточность -- Основы Java garbage collection +- [Основы Java garbage collection](http://web.archive.org/web/20180831013112/https://ggenikus.github.io/blog/2014/05/04/gc) - Размер Java объектов - Введение в Java Reflection API - Структуры данных в картинках From 32cc51902ef764b92caf42dbc000aa55e7ab6e4d Mon Sep 17 00:00:00 2001 From: kirshov Date: Fri, 27 Mar 2020 09:01:48 +0500 Subject: [PATCH 3/4] deiv --- .../java/ru/javawebinar/topjava/Test.java | 19 +++++++ .../javawebinar/topjava/model/UserMeal.java | 29 +++++++++++ .../topjava/model/UserMealWithExcess.java | 30 ++++++++++++ .../ru/javawebinar/topjava/util/TimeUtil.java | 9 ++++ .../topjava/util/UserMealsUtil.java | 49 +++++++++++++++++++ 5 files changed, 136 insertions(+) create mode 100644 src/main/java/ru/javawebinar/topjava/Test.java create mode 100644 src/main/java/ru/javawebinar/topjava/model/UserMeal.java create mode 100644 src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java create mode 100644 src/main/java/ru/javawebinar/topjava/util/TimeUtil.java create mode 100644 src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java diff --git a/src/main/java/ru/javawebinar/topjava/Test.java b/src/main/java/ru/javawebinar/topjava/Test.java new file mode 100644 index 000000000000..be94083edc7a --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/Test.java @@ -0,0 +1,19 @@ +package ru.javawebinar.topjava; + +import java.util.stream.Stream; + +public class Test { + + public static void main(){ + + Stream.of("dd2", "aa2", "bb1", "bb3", "cc4") + .map(s -> { + System.out.println("map: " + s); + return s.toUpperCase(); + }) + .anyMatch(s -> { + System.out.println("anyMatch: " + s); + return s.startsWith("A"); + }); + } +} diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMeal.java b/src/main/java/ru/javawebinar/topjava/model/UserMeal.java new file mode 100644 index 000000000000..d8f91b127f6a --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/model/UserMeal.java @@ -0,0 +1,29 @@ +package ru.javawebinar.topjava.model; + +import java.time.LocalDateTime; + +public class UserMeal { + private final LocalDateTime dateTime; + + private final String description; + + private final int calories; + + public UserMeal(LocalDateTime dateTime, String description, int calories) { + this.dateTime = dateTime; + this.description = description; + this.calories = calories; + } + + public LocalDateTime getDateTime() { + return dateTime; + } + + public String getDescription() { + return description; + } + + public int getCalories() { + return calories; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java b/src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java new file mode 100644 index 000000000000..d0aa431a35d9 --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java @@ -0,0 +1,30 @@ +package ru.javawebinar.topjava.model; + +import java.time.LocalDateTime; + +public class UserMealWithExcess { + private final LocalDateTime dateTime; + + private final String description; + + private final int calories; + + private final boolean excess; + + public UserMealWithExcess(LocalDateTime dateTime, String description, int calories, boolean excess) { + this.dateTime = dateTime; + this.description = description; + this.calories = calories; + this.excess = excess; + } + + @Override + public String toString() { + return "UserMealWithExcess{" + + "dateTime=" + dateTime + + ", description='" + description + '\'' + + ", calories=" + calories + + ", excess=" + excess + + '}'; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/util/TimeUtil.java b/src/main/java/ru/javawebinar/topjava/util/TimeUtil.java new file mode 100644 index 000000000000..3d536a5c5ef2 --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/util/TimeUtil.java @@ -0,0 +1,9 @@ +package ru.javawebinar.topjava.util; + +import java.time.LocalTime; + +public class TimeUtil { + public static boolean isBetweenInclusive(LocalTime lt, LocalTime startTime, LocalTime endTime) { + return lt.compareTo(startTime) >= 0 && lt.compareTo(endTime) <= 0; + } +} diff --git a/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java new file mode 100644 index 000000000000..c7ced8455e53 --- /dev/null +++ b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java @@ -0,0 +1,49 @@ +package ru.javawebinar.topjava.util; + +import ru.javawebinar.topjava.model.UserMeal; +import ru.javawebinar.topjava.model.UserMealWithExcess; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.Month; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +public class UserMealsUtil { + public static void main(String[] args) { + List meals = Arrays.asList( + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 30, 10, 0), "Завтрак", 500), + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 30, 13, 0), "Обед", 1000), + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 30, 20, 0), "Ужин", 500), + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 0, 0), "Еда на граничное значение", 100), + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 10, 0), "Завтрак", 1000), + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 13, 0), "Обед", 500), + new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 20, 0), "Ужин", 410) + ); + + List mealsTo = filteredByCycles(meals, LocalTime.of(7, 0), LocalTime.of(12, 0), 2000); + mealsTo.forEach(System.out::println); + +// System.out.println(filteredByStreams(meals, LocalTime.of(7, 0), LocalTime.of(12, 0), 2000)); + } + + public static List filteredByCycles(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + List resultMeals = new ArrayList<>(); + meals.forEach((mealItem) -> { + final LocalTime mealTime = LocalTime.of(mealItem.getDateTime().getHour(), mealItem.getDateTime().getMinute()); + + if(mealTime.compareTo(startTime) >= 0 && mealTime.compareTo(endTime) <= 0 ){ + resultMeals.add(new UserMealWithExcess(mealItem.getDateTime(), mealItem.getDescription(), mealItem.getCalories(), false)); + } + }); + + return resultMeals; + } + + public static List filteredByStreams(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + // TODO Implement by streams + return null; + } +} From a69e8efa604da50e36903bf13da866fdc66124d1 Mon Sep 17 00:00:00 2001 From: kirshov Date: Sun, 29 Mar 2020 19:36:20 +0500 Subject: [PATCH 4/4] less 0 done --- .../java/ru/javawebinar/topjava/Main.java | 21 +++++ .../java/ru/javawebinar/topjava/Test.java | 19 ---- .../model/{UserMeal.java => Meal.java} | 4 +- .../{UserMealWithExcess.java => MealTo.java} | 6 +- .../topjava/util/UserMealsUtil.java | 87 +++++++++++++------ 5 files changed, 87 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/ru/javawebinar/topjava/Test.java rename src/main/java/ru/javawebinar/topjava/model/{UserMeal.java => Meal.java} (83%) rename src/main/java/ru/javawebinar/topjava/model/{UserMealWithExcess.java => MealTo.java} (78%) diff --git a/src/main/java/ru/javawebinar/topjava/Main.java b/src/main/java/ru/javawebinar/topjava/Main.java index c2f9cc618f7c..ff53b0ef5e4f 100644 --- a/src/main/java/ru/javawebinar/topjava/Main.java +++ b/src/main/java/ru/javawebinar/topjava/Main.java @@ -1,5 +1,10 @@ package ru.javawebinar.topjava; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Stream; + /** * @see Demo application * @see Initial project @@ -7,5 +12,21 @@ public class Main { public static void main(String[] args) { System.out.format("Hello TopJava Enterprise!"); + + HashMap l = new HashMap<>(); + l.put(123, 4); + l.put(321, 5); + + System.out.println(l.size()); + + /* Stream.of("dd2", "aa2", "bb1", "bb3", "cc4") + .map(s -> { + System.out.println("map: " + s); + return s.toUpperCase(); + }) + .anyMatch(s -> { + System.out.println("anyMatch: " + s); + return s.startsWith("A"); + });*/ } } diff --git a/src/main/java/ru/javawebinar/topjava/Test.java b/src/main/java/ru/javawebinar/topjava/Test.java deleted file mode 100644 index be94083edc7a..000000000000 --- a/src/main/java/ru/javawebinar/topjava/Test.java +++ /dev/null @@ -1,19 +0,0 @@ -package ru.javawebinar.topjava; - -import java.util.stream.Stream; - -public class Test { - - public static void main(){ - - Stream.of("dd2", "aa2", "bb1", "bb3", "cc4") - .map(s -> { - System.out.println("map: " + s); - return s.toUpperCase(); - }) - .anyMatch(s -> { - System.out.println("anyMatch: " + s); - return s.startsWith("A"); - }); - } -} diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMeal.java b/src/main/java/ru/javawebinar/topjava/model/Meal.java similarity index 83% rename from src/main/java/ru/javawebinar/topjava/model/UserMeal.java rename to src/main/java/ru/javawebinar/topjava/model/Meal.java index d8f91b127f6a..f546cef0f74a 100644 --- a/src/main/java/ru/javawebinar/topjava/model/UserMeal.java +++ b/src/main/java/ru/javawebinar/topjava/model/Meal.java @@ -2,14 +2,14 @@ import java.time.LocalDateTime; -public class UserMeal { +public class Meal { private final LocalDateTime dateTime; private final String description; private final int calories; - public UserMeal(LocalDateTime dateTime, String description, int calories) { + public Meal(LocalDateTime dateTime, String description, int calories) { this.dateTime = dateTime; this.description = description; this.calories = calories; diff --git a/src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java b/src/main/java/ru/javawebinar/topjava/model/MealTo.java similarity index 78% rename from src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java rename to src/main/java/ru/javawebinar/topjava/model/MealTo.java index d0aa431a35d9..4ad8718c50e7 100644 --- a/src/main/java/ru/javawebinar/topjava/model/UserMealWithExcess.java +++ b/src/main/java/ru/javawebinar/topjava/model/MealTo.java @@ -2,16 +2,16 @@ import java.time.LocalDateTime; -public class UserMealWithExcess { +public class MealTo { private final LocalDateTime dateTime; private final String description; private final int calories; - private final boolean excess; + private boolean excess; - public UserMealWithExcess(LocalDateTime dateTime, String description, int calories, boolean excess) { + public MealTo(LocalDateTime dateTime, String description, int calories, boolean excess) { this.dateTime = dateTime; this.description = description; this.calories = calories; diff --git a/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java index c7ced8455e53..bc9f21d235c3 100644 --- a/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java +++ b/src/main/java/ru/javawebinar/topjava/util/UserMealsUtil.java @@ -1,49 +1,84 @@ package ru.javawebinar.topjava.util; -import ru.javawebinar.topjava.model.UserMeal; -import ru.javawebinar.topjava.model.UserMealWithExcess; +import ru.javawebinar.topjava.model.Meal; +import ru.javawebinar.topjava.model.MealTo; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.Month; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicReference; +import java.util.*; +import java.util.stream.Collectors; public class UserMealsUtil { public static void main(String[] args) { - List meals = Arrays.asList( - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 30, 10, 0), "Завтрак", 500), - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 30, 13, 0), "Обед", 1000), - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 30, 20, 0), "Ужин", 500), - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 0, 0), "Еда на граничное значение", 100), - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 10, 0), "Завтрак", 1000), - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 13, 0), "Обед", 500), - new UserMeal(LocalDateTime.of(2020, Month.JANUARY, 31, 20, 0), "Ужин", 410) + List meals = Arrays.asList( + new Meal(LocalDateTime.of(2020, Month.JANUARY, 30, 10, 0), "Завтрак", 500), + new Meal(LocalDateTime.of(2020, Month.JANUARY, 30, 13, 0), "Обед", 1000), + new Meal(LocalDateTime.of(2020, Month.JANUARY, 30, 20, 0), "Ужин", 500), + new Meal(LocalDateTime.of(2020, Month.JANUARY, 31, 0, 0), "Еда на граничное значение", 100), + new Meal(LocalDateTime.of(2020, Month.JANUARY, 31, 10, 0), "Завтрак", 1000), + new Meal(LocalDateTime.of(2020, Month.JANUARY, 31, 13, 0), "Обед", 500), + new Meal(LocalDateTime.of(2020, Month.JANUARY, 31, 20, 0), "Ужин", 410) ); - List mealsTo = filteredByCycles(meals, LocalTime.of(7, 0), LocalTime.of(12, 0), 2000); - mealsTo.forEach(System.out::println); + LocalTime dateStart = LocalTime.of(7, 0); + LocalTime dateEnd = LocalTime.of(12, 0); + Integer caloriesPerDay = 2000; -// System.out.println(filteredByStreams(meals, LocalTime.of(7, 0), LocalTime.of(12, 0), 2000)); + filteredByCycles(meals, dateStart, dateEnd, caloriesPerDay).forEach(System.out::println); + + System.out.println("============="); + + filteredByStreams(meals, dateStart, dateEnd, caloriesPerDay).forEach(System.out::println); + + System.out.println("============="); + + filteredByCycles2(meals, dateStart, dateEnd, caloriesPerDay).forEach(System.out::println); } - public static List filteredByCycles(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { - List resultMeals = new ArrayList<>(); - meals.forEach((mealItem) -> { - final LocalTime mealTime = LocalTime.of(mealItem.getDateTime().getHour(), mealItem.getDateTime().getMinute()); + public static List filteredByCycles(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + Map excessList = new HashMap<>(); + meals.forEach(mealItem -> { + excessList.merge(mealItem.getDateTime().toLocalDate(), mealItem.getCalories(), Integer::sum); + }); - if(mealTime.compareTo(startTime) >= 0 && mealTime.compareTo(endTime) <= 0 ){ - resultMeals.add(new UserMealWithExcess(mealItem.getDateTime(), mealItem.getDescription(), mealItem.getCalories(), false)); + List resultMeals = new ArrayList<>(); + meals.forEach(mealItem -> { + if(TimeUtil.isBetweenInclusive(mealItem.getDateTime().toLocalTime(), startTime, endTime)){ + resultMeals.add(new MealTo(mealItem.getDateTime(), mealItem.getDescription(), mealItem.getCalories(), excessList.get(mealItem.getDateTime().toLocalDate()) > caloriesPerDay)); } }); return resultMeals; } - public static List filteredByStreams(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { - // TODO Implement by streams - return null; + public static List filteredByStreams(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + Map caloriesSumByDate = meals.stream() + .collect(Collectors.groupingBy(um -> um.getDateTime().toLocalDate(), Collectors.summingInt(Meal::getCalories))); + + return meals.stream() + .filter(mealItem -> TimeUtil.isBetweenInclusive(mealItem.getDateTime().toLocalTime(), startTime, endTime)) + .map(mealItem -> new MealTo(mealItem.getDateTime(), mealItem.getDescription(), mealItem.getCalories(), + caloriesSumByDate.get(mealItem.getDateTime().toLocalDate()) > caloriesPerDay + )) + .collect(Collectors.toList()); + } + + public static List filteredByCycles2(List meals, LocalTime startTime, LocalTime endTime, int caloriesPerDay) { + Map excessList = new HashMap<>(); + for (Meal meal : meals){ + LocalDate lDate= meal.getDateTime().toLocalDate(); + excessList.put(lDate, excessList.getOrDefault(lDate, 0) + meal.getCalories()); + } + + List resultMeals = new ArrayList<>(); + for (Meal mealItem : meals){ + if(TimeUtil.isBetweenInclusive(mealItem.getDateTime().toLocalTime(), startTime, endTime)) { + resultMeals.add(new MealTo(mealItem.getDateTime(), mealItem.getDescription(), mealItem.getCalories(), excessList.getOrDefault(mealItem.getDateTime().toLocalDate(), 0) > caloriesPerDay)); + } + } + + return resultMeals; } }