From 4c31043869c7fbbdb0529a6f09169ef2cf66d4c5 Mon Sep 17 00:00:00 2001 From: Vyacheslav Date: Tue, 9 Jan 2024 17:26:06 +0300 Subject: [PATCH] =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=BE?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../practicum/dinner/DinnerConstructor.java | 58 +++++++++++++++++++ src/ru/practicum/dinner/DinnerDao.java | 34 +++++++++++ src/ru/practicum/dinner/Main.java | 26 ++++++--- 3 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 src/ru/practicum/dinner/DinnerDao.java diff --git a/src/ru/practicum/dinner/DinnerConstructor.java b/src/ru/practicum/dinner/DinnerConstructor.java index 29da0b5..abd2476 100644 --- a/src/ru/practicum/dinner/DinnerConstructor.java +++ b/src/ru/practicum/dinner/DinnerConstructor.java @@ -1,5 +1,63 @@ package ru.practicum.dinner; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.stream.IntStream; + public class DinnerConstructor { + private final DinnerDao dao; + private final Random random; + + public DinnerConstructor(DinnerDao dao) { + this.dao = dao; + this.random = new Random(); + } + + public void save(String dishType, String dishName) { + dao.save(dishType, dishName); + System.out.printf("новое блюдо %s добавлено в тип %s\n", dishName, dishType); + } + + public Map> generateDishCombo(List dishTypes, int numberOfCombos) { + Map> dishesByTypes = dao.getAllDishesByTypes(dishTypes); + Map> combos = new HashMap<>(); + + IntStream.range(0, numberOfCombos) + .forEach(i -> { + List comboDishes = new ArrayList<>(); + dishesByTypes.values().forEach(dishList -> { + String randomDish = dishList.get(random.nextInt(dishList.size())); + comboDishes.add(randomDish); + }); + combos.put("Комбо " + (i + 1), comboDishes); + }); + return combos; + } + + public boolean isNotContainsTypes(List dishTypes) { + boolean result = false; + List notContainsTypes = dao.isNotContainsTypes(dishTypes); + if (!notContainsTypes.isEmpty()) { + System.out.printf("Вы ввели несуществующий тип: %s", notContainsTypes.get(0)); + System.out.println(); + System.out.println("Введите список существующих типов:"); + result = true; + } + return result; + } + + public void printDishCombos(Map> combos) { + combos.entrySet() + .stream() + .sorted((e1, e2) -> { + String key1 = e1.getKey().replaceAll("\\D", ""); + String key2 = e2.getKey().replaceAll("\\D", ""); + return Integer.compare(Integer.parseInt(key1), Integer.parseInt(key2)); + }) + .forEach((e) -> System.out.println(e.getKey() + "\n" + e.getValue())); + } } diff --git a/src/ru/practicum/dinner/DinnerDao.java b/src/ru/practicum/dinner/DinnerDao.java new file mode 100644 index 0000000..20bdb24 --- /dev/null +++ b/src/ru/practicum/dinner/DinnerDao.java @@ -0,0 +1,34 @@ +package ru.practicum.dinner; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class DinnerDao { + + private final Map> dinnerDb; + + public DinnerDao(Map> dinnerDb) { + this.dinnerDb = dinnerDb; + } + + public void save(String dishType, String dishName) { + if (!dinnerDb.containsKey(dishType)) { + List dishList = new ArrayList<>(); + dinnerDb.put(dishType, dishList); + } + dinnerDb.get(dishType).add(dishName); + } + + public Map> getAllDishesByTypes(List dishTypes) { + return dishTypes.stream() + .collect(Collectors.toMap(k -> k, dinnerDb::get)); + } + + public List isNotContainsTypes(List dishTypes) { + return dishTypes.stream() + .filter(k -> !dinnerDb.containsKey(k)) + .collect(Collectors.toList()); + } +} diff --git a/src/ru/practicum/dinner/Main.java b/src/ru/practicum/dinner/Main.java index f68de29..be4bc55 100644 --- a/src/ru/practicum/dinner/Main.java +++ b/src/ru/practicum/dinner/Main.java @@ -1,14 +1,17 @@ package ru.practicum.dinner; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; import java.util.Scanner; public class Main { - static DinnerConstructor dc; - static Scanner scanner; + private static DinnerConstructor dc; + private static Scanner scanner; public static void main(String[] args) { - dc = new DinnerConstructor(); + dc = new DinnerConstructor(new DinnerDao(new HashMap<>())); scanner = new Scanner(System.in); while (true) { @@ -40,8 +43,8 @@ private static void addNewDish() { String dishType = scanner.nextLine(); System.out.println("Введите название блюда:"); String dishName = scanner.nextLine(); - // добавьте новое блюдо + dc.save(dishType, dishName); } private static void generateDishCombo() { @@ -51,15 +54,20 @@ private static void generateDishCombo() { int numberOfCombos = scanner.nextInt(); scanner.nextLine(); - System.out.println("Вводите типы блюда, разделяя символом переноса строки (enter). Для завершения ввода введите пустую строку"); + System.out.println( + "Вводите типы блюда, разделяя символом переноса строки (enter). Для завершения ввода введите пустую строку"); String nextItem = scanner.nextLine(); - + List dishTypes = new ArrayList<>(); //реализуйте ввод типов блюд while (!nextItem.isEmpty()) { - + dishTypes.add(nextItem); + nextItem = scanner.nextLine(); } - + if (dc.isNotContainsTypes(dishTypes)) { + generateDishCombo(); + return; + } + dc.printDishCombos(dc.generateDishCombo(dishTypes, numberOfCombos)); // сгенерируйте комбинации блюд и выведите на экран - } }