Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions src/ru/practicum/dinner/DinnerConstructor.java
Original file line number Diff line number Diff line change
@@ -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<String, List<String>> generateDishCombo(List<String> dishTypes, int numberOfCombos) {
Map<String, List<String>> dishesByTypes = dao.getAllDishesByTypes(dishTypes);
Map<String, List<String>> combos = new HashMap<>();

IntStream.range(0, numberOfCombos)
.forEach(i -> {
List<String> 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<String> dishTypes) {
boolean result = false;
List<String> 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<String, List<String>> 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()));
}
}
34 changes: 34 additions & 0 deletions src/ru/practicum/dinner/DinnerDao.java
Original file line number Diff line number Diff line change
@@ -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<String, List<String>> dinnerDb;

public DinnerDao(Map<String, List<String>> dinnerDb) {
this.dinnerDb = dinnerDb;
}

public void save(String dishType, String dishName) {
if (!dinnerDb.containsKey(dishType)) {
List<String> dishList = new ArrayList<>();
dinnerDb.put(dishType, dishList);
}
dinnerDb.get(dishType).add(dishName);
}

public Map<String, List<String>> getAllDishesByTypes(List<String> dishTypes) {
return dishTypes.stream()
.collect(Collectors.toMap(k -> k, dinnerDb::get));
}

public List<String> isNotContainsTypes(List<String> dishTypes) {
return dishTypes.stream()
.filter(k -> !dinnerDb.containsKey(k))
.collect(Collectors.toList());
}
}
26 changes: 17 additions & 9 deletions src/ru/practicum/dinner/Main.java
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down Expand Up @@ -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() {
Expand All @@ -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<String> dishTypes = new ArrayList<>();
//реализуйте ввод типов блюд
while (!nextItem.isEmpty()) {

dishTypes.add(nextItem);
nextItem = scanner.nextLine();
}

if (dc.isNotContainsTypes(dishTypes)) {
generateDishCombo();
return;
}
dc.printDishCombos(dc.generateDishCombo(dishTypes, numberOfCombos));
// сгенерируйте комбинации блюд и выведите на экран

}
}