Skip to content

Commit dac93f8

Browse files
committed
функционал реализован
1 parent 68112cd commit dac93f8

3 files changed

Lines changed: 112 additions & 9 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,63 @@
11
package ru.practicum.dinner;
22

3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
6+
import java.util.Map;
7+
import java.util.Random;
8+
import java.util.concurrent.atomic.AtomicBoolean;
9+
import java.util.stream.IntStream;
10+
311
public class DinnerConstructor {
412

13+
private final DinnerDao dao;
14+
private final Random random;
15+
16+
public DinnerConstructor(DinnerDao dao) {
17+
this.dao = dao;
18+
this.random = new Random();
19+
}
20+
21+
public void save(String dishType, String dishName) {
22+
dao.save(dishType, dishName);
23+
System.out.printf("новое блюдо %s добавлено в тип %s\n", dishName, dishType);
24+
}
25+
26+
public Map<String, List<String>> generateDishCombo(List<String> dishTypes, int numberOfCombos) {
27+
Map<String, List<String>> dishesByTypes = dao.getAllDishesByTypes(dishTypes);
28+
Map<String, List<String>> combos = new HashMap<>();
29+
30+
IntStream.range(0, numberOfCombos)
31+
.forEach(i -> {
32+
List<String> comboDishes = new ArrayList<>();
33+
dishesByTypes.values().forEach(dishList -> {
34+
String randomDish = dishList.get(random.nextInt(dishList.size()));
35+
comboDishes.add(randomDish);
36+
});
37+
combos.put("Комбо " + (i + 1), comboDishes);
38+
});
39+
return combos;
40+
}
41+
42+
public boolean isNotContainsTypes(List<String> dishTypes) {
43+
AtomicBoolean result = new AtomicBoolean(false);
44+
dao.isNotContainsTypes(dishTypes)
45+
.ifPresent((d) -> {
46+
System.out.printf("Вы ввели несуществующий тип: %s", d);
47+
System.out.println();
48+
System.out.println("Введите список существующих типов:");
49+
result.set(true);
50+
});
51+
return result.get();
52+
}
53+
public void printDishCombos(Map<String, List<String>> combos) {
54+
combos.entrySet()
55+
.stream()
56+
.sorted((e1, e2) -> {
57+
String key1 = e1.getKey().replaceAll("\\D", "");
58+
String key2 = e2.getKey().replaceAll("\\D", "");
59+
return Integer.compare(Integer.parseInt(key1), Integer.parseInt(key2));
60+
})
61+
.forEach((e) -> System.out.println(e.getKey() + "\n" + e.getValue()));
62+
}
563
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package ru.practicum.dinner;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Map;
6+
import java.util.Optional;
7+
import java.util.stream.Collectors;
8+
9+
public class DinnerDao {
10+
11+
private final Map<String, List<String>> dinnerDb;
12+
13+
public DinnerDao(Map<String, List<String>> dinnerDb) {
14+
this.dinnerDb = dinnerDb;
15+
}
16+
17+
public void save(String dishType, String dishName) {
18+
if (!dinnerDb.containsKey(dishType)) {
19+
List<String> dishList = new ArrayList<>();
20+
dishList.add(dishName);
21+
dinnerDb.put(dishType, dishList);
22+
} else {
23+
dinnerDb.get(dishType).add(dishName);
24+
}
25+
}
26+
27+
public Map<String, List<String>> getAllDishesByTypes(List<String> dishTypes) {
28+
return dishTypes.stream()
29+
.collect(Collectors.toMap(k -> k, dinnerDb::get));
30+
}
31+
32+
public Optional<String> isNotContainsTypes(List<String> dishTypes) {
33+
return dishTypes.stream()
34+
.filter(k -> !dinnerDb.containsKey(k))
35+
.findAny();
36+
}
37+
}

src/ru/practicum/dinner/Main.java

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package ru.practicum.dinner;
22

3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.List;
36
import java.util.Scanner;
47

58
public class Main {
69

7-
static DinnerConstructor dc;
8-
static Scanner scanner;
10+
private static DinnerConstructor dc;
11+
private static Scanner scanner;
912

1013
public static void main(String[] args) {
11-
dc = new DinnerConstructor();
14+
dc = new DinnerConstructor(new DinnerDao(new HashMap<>()));
1215
scanner = new Scanner(System.in);
1316

1417
while (true) {
@@ -40,8 +43,8 @@ private static void addNewDish() {
4043
String dishType = scanner.nextLine();
4144
System.out.println("Введите название блюда:");
4245
String dishName = scanner.nextLine();
43-
4446
// добавьте новое блюдо
47+
dc.save(dishType, dishName);
4548
}
4649

4750
private static void generateDishCombo() {
@@ -51,15 +54,20 @@ private static void generateDishCombo() {
5154
int numberOfCombos = scanner.nextInt();
5255
scanner.nextLine();
5356

54-
System.out.println("Вводите типы блюда, разделяя символом переноса строки (enter). Для завершения ввода введите пустую строку");
57+
System.out.println(
58+
"Вводите типы блюда, разделяя символом переноса строки (enter). Для завершения ввода введите пустую строку");
5559
String nextItem = scanner.nextLine();
56-
60+
List<String> dishTypes = new ArrayList<>();
5761
//реализуйте ввод типов блюд
5862
while (!nextItem.isEmpty()) {
59-
63+
dishTypes.add(nextItem);
64+
nextItem = scanner.nextLine();
6065
}
61-
66+
if (dc.isNotContainsTypes(dishTypes)) {
67+
generateDishCombo();
68+
return;
69+
}
70+
dc.printDishCombos(dc.generateDishCombo(dishTypes, numberOfCombos));
6271
// сгенерируйте комбинации блюд и выведите на экран
63-
6472
}
6573
}

0 commit comments

Comments
 (0)