Skip to content

Commit 864b23e

Browse files
committed
Классы сортировки, заполнения коллекций и пользовательский интерфейс соединены между собой
1 parent 1fc7ef9 commit 864b23e

File tree

11 files changed

+320
-55
lines changed

11 files changed

+320
-55
lines changed

src/main/java/input/Strategy/FileReaderStrategy.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,8 @@ public Optional<Client.ClientBuilder> parseToClient(String line) {
133133
return Optional.empty();
134134
}
135135
}
136+
137+
public String getFilePath() {
138+
return filePath;
139+
}
136140
}

src/main/java/input/Strategy/RandomDataGeneratorStrategy.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,8 @@ private int generateUniqueId() {
123123
userIds.add(id);
124124
return id;
125125
}
126+
127+
public int getCount() {
128+
return count;
129+
}
126130
}

src/main/java/sorting/AbstractMergeSortStrategy.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
11
package sorting;
22

33
import dto.Client;
4-
import java.util.ArrayList;
4+
import input.CustomCollection;
5+
56
import java.util.Comparator;
6-
import java.util.List;
77

88
public abstract class AbstractMergeSortStrategy implements SortingStrategy {
99

10-
public void sortWithComparator(List<Client> clients, Comparator<Client> comparator) {
10+
public void sortWithComparator(CustomCollection<Client> clients, Comparator<Client> comparator) {
1111
if (clients == null || clients.size() <= 1) {
1212
return;
1313
}
1414

1515
mergeSort(clients, 0, clients.size() - 1, comparator);
1616
}
1717

18+
protected abstract Comparator<Client> getComparator();
19+
1820
@Override
1921
public String getStrategyName() {
2022
return "Abstract Merge Sort (сортировка слиянием)";
2123
}
2224

23-
private void mergeSort(List<Client> clients, int left, int right,
25+
private void mergeSort(CustomCollection<Client> clients, int left, int right,
2426
Comparator<Client> comparator) {
2527

2628
if (left < right) {
@@ -35,10 +37,10 @@ private void mergeSort(List<Client> clients, int left, int right,
3537
}
3638

3739

38-
private void merge(List<Client> clients, int left, int mid, int right,
40+
private void merge(CustomCollection<Client> clients, int left, int mid, int right,
3941
Comparator<Client> comparator) {
4042

41-
List<Client> temp = new ArrayList<>();
43+
CustomCollection<Client> temp = new CustomCollection<>();
4244

4345
int i = left;
4446
int j = mid + 1;
@@ -76,14 +78,18 @@ private void merge(List<Client> clients, int left, int mid, int right,
7678
}
7779
}
7880

79-
public void sortEvenValuesOnly(List<Client> clients, Comparator<Client> comparator) {
81+
public void sortEvenValuesOnly(CustomCollection<Client> clients) {
82+
sortEvenValuesOnly(clients, getComparator());
83+
}
84+
85+
public void sortEvenValuesOnly(CustomCollection<Client> clients, Comparator<Client> comparator) {
8086
if (clients == null || clients.isEmpty()) {
8187
return;
8288
}
8389

8490
// Создаем список для хранения элементов с четными idNumber и их индексов
85-
List<Client> evenClients = new ArrayList<>();
86-
List<Integer> evenIndices = new ArrayList<>();
91+
CustomCollection<Client> evenClients = new CustomCollection<>();
92+
CustomCollection<Integer> evenIndices = new CustomCollection<>();
8793

8894
// Собираем все элементы с четными idNumber и запоминаем их индексы
8995
for (int i = 0; i < clients.size(); i++) {

src/main/java/sorting/MergeSortDefaultStrategy.java

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,28 @@
11
package sorting;
22

33
import dto.Client;
4+
import input.CustomCollection;
45

56
import java.util.Comparator;
6-
import java.util.List;
77

8-
public class MergeSortDefaultStrategy extends AbstractMergeSortStrategy{
8+
public class MergeSortDefaultStrategy extends AbstractMergeSortStrategy {
99

1010
@Override
11-
public void sort(List<Client> clients) {
12-
Comparator<Client> comparator = createDefaultComparator();
13-
sortWithComparator(clients, comparator);
11+
public void sort(CustomCollection<Client> clients) {
12+
sortWithComparator(clients, getComparator());
1413
}
1514

16-
private Comparator<Client> createDefaultComparator() {
17-
return new Comparator<Client>() {
18-
@Override
19-
public int compare(Client client1, Client client2) {
20-
int nameComparison = client1.getName().compareTo(client2.getName());
21-
if (nameComparison != 0) {
22-
return nameComparison;
23-
}
24-
25-
int idComparison = Integer.compare(client1.getIdNumber(), client2.getIdNumber());
26-
if (idComparison != 0) {
27-
return idComparison;
28-
}
29-
30-
return client1.getPhoneNumber().compareTo(client2.getPhoneNumber());
31-
}
15+
protected Comparator<Client> getComparator() {
16+
return (c1, c2) -> {
17+
int nameComparison = c1.getName().compareTo(c2.getName());
18+
if (nameComparison != 0) return nameComparison;
19+
20+
int idComparison = Integer.compare(c1.getIdNumber(), c2.getIdNumber());
21+
if (idComparison != 0) return idComparison;
22+
23+
return c1.getPhoneNumber().compareTo(c2.getPhoneNumber());
3224
};
25+
3326
}
3427

3528
@Override

src/main/java/sorting/MergeSortDynamicStrategy.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import dto.Client;
44
import enums.Field;
5+
import input.CustomCollection;
56

67
import java.util.Comparator;
7-
import java.util.List;
88

99
public class MergeSortDynamicStrategy extends AbstractMergeSortStrategy{
1010
private final Field field;
@@ -16,21 +16,23 @@ public MergeSortDynamicStrategy(Field field, boolean ascending) {
1616
}
1717

1818
@Override
19-
public void sort(List<Client> clients) {
20-
Comparator<Client> comparator = createComparatorForField();
21-
if (!ascending) {
22-
comparator = comparator.reversed();
23-
}
24-
sortWithComparator(clients, comparator);
19+
public void sort(CustomCollection<Client> clients) {
20+
sortWithComparator(clients, getComparator());
2521
}
2622

27-
public Comparator<Client> createComparatorForField(){
28-
return switch (field){
23+
public Comparator<Client> getComparator(){
24+
Comparator<Client> comparator = switch (field){
2925
case NAME -> Comparator.comparing(Client :: getName);
3026
case ID_NUMBER -> Comparator.comparing(Client :: getIdNumber);
3127
case PHONE_NUMBER -> Comparator.comparing(Client :: getPhoneNumber);
3228
default -> throw new IllegalArgumentException("Неизвестное поле: " + field);
3329
};
30+
31+
if (ascending) {
32+
return comparator;
33+
} else {
34+
return comparator.reversed();
35+
}
3436
}
3537

3638
@Override
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package sorting;
2+
3+
public class SortingManager {
4+
private SortingStrategy currentStrategy;
5+
6+
public SortingManager(){}
7+
8+
public SortingManager(SortingStrategy initialStrategy) {
9+
if (initialStrategy == null) {
10+
throw new IllegalArgumentException("Стратегия не может быть null");
11+
}
12+
currentStrategy = initialStrategy;
13+
}
14+
15+
public void setStrategy(SortingStrategy strategy) {
16+
if (strategy == null) {
17+
throw new IllegalArgumentException("Стратегия не может быть null");
18+
}
19+
this.currentStrategy = strategy;
20+
}
21+
22+
public SortingStrategy getCurrentStrategy() {
23+
return currentStrategy;
24+
}
25+
}
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package sorting;
22

33
import dto.Client;
4-
import java.util.Comparator;
5-
import java.util.List;
4+
import input.CustomCollection;
65

76
public interface SortingStrategy {
87

98

10-
void sort(List<Client> clients);
9+
void sort(CustomCollection<Client> clients);
1110
String getStrategyName();
11+
void sortEvenValuesOnly(CustomCollection<Client> clients);
1212
}

src/main/java/userInterface/AppController.java

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,51 @@
11
package userInterface;
22

33
import dto.Client;
4+
import enums.Field;
45
import input.CustomCollection;
56
import input.InputManager;
6-
import input.Strategy.FileReaderStrategy;
7-
import input.Strategy.ManualInputReaderStrategy;
8-
import input.Strategy.RandomDataGeneratorStrategy;
7+
import sorting.MergeSortDefaultStrategy;
8+
import sorting.MergeSortDynamicStrategy;
9+
import sorting.SortingManager;
910

1011
import java.io.IOException;
1112

1213
public class AppController {
1314

1415
private final InputManager inputManager = new InputManager();
1516
private final CustomCollection<Client> fullList = new CustomCollection<>();
17+
private final SortingManager sortingManager = new SortingManager();
18+
19+
public void startDefaultSorting(){
20+
sortingManager.setStrategy(new MergeSortDefaultStrategy());
21+
sortingManager.getCurrentStrategy().sort(fullList);
22+
showAllClients();
23+
}
24+
25+
public void startEvenIdsSorting(){
26+
sortingManager.setStrategy(new MergeSortDefaultStrategy());
27+
sortingManager.getCurrentStrategy().sortEvenValuesOnly(fullList);
28+
showAllClients();
29+
}
30+
31+
public void startDynamicSorting(Field field){
32+
sortingManager.setStrategy(new MergeSortDynamicStrategy(field, true));
33+
sortingManager.getCurrentStrategy().sort(fullList);
34+
showAllClients();
35+
}
1636

1737
public CustomCollection<Client> getFullList() {
1838
return fullList;
1939
}
2040

21-
public void showAllClientsInDefaultOrder(){
41+
public void showAllClients(){
2242
for(Client client : fullList){
2343
System.out.println(client);
2444
}
2545
}
2646

2747
public void startFileReaderStrategy(String path){
28-
inputManager.setStrategy(new FileReaderStrategy(path));
48+
inputManager.setStrategy(inputManager.createFileStrategy(path));
2949
try {
3050
CustomCollection<Client> fromFileList = inputManager.loadData();
3151
fullList.addAll(fromFileList);
@@ -38,7 +58,7 @@ public void startFileReaderStrategy(String path){
3858
}
3959

4060
public void startManualInputStrategy(){
41-
inputManager.setStrategy(new ManualInputReaderStrategy());
61+
inputManager.setStrategy(inputManager.createManualStrategy());
4262
try {
4363
CustomCollection<Client> manualList = inputManager.loadData();
4464
fullList.addAll(manualList);
@@ -51,9 +71,10 @@ public void startManualInputStrategy(){
5171
}
5272

5373
public void startRandomDataStrategy(int count){
54-
inputManager.setStrategy(new RandomDataGeneratorStrategy(count));
74+
inputManager.setStrategy(inputManager.createRandomStrategy(count));
5575
try {
5676
CustomCollection<Client> randomList = inputManager.loadData();
77+
fullList.addAll(randomList);
5778
for(Client client : randomList){
5879
System.out.println(client);
5980
}

src/main/java/userInterface/MenuManager.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package userInterface;
22

3+
import enums.Field;
4+
35
import java.util.Scanner;
46

57
public class MenuManager implements Printable {
@@ -130,6 +132,7 @@ public void printIdSortingOptions() {
130132

131133
@Override
132134
public void printNameSortingOptions() {
135+
appController.startDynamicSorting(Field.NAME);
133136
boolean backToMain = false;
134137
while (!backToMain && running) {
135138
Printable.super.printNameSortingOptions();
@@ -139,6 +142,7 @@ public void printNameSortingOptions() {
139142

140143
@Override
141144
public void printPhoneSortingOptions() {
145+
appController.startDynamicSorting(Field.PHONE_NUMBER);
142146
boolean backToMain = false;
143147
while (!backToMain && running) {
144148
Printable.super.printPhoneSortingOptions();
@@ -147,10 +151,12 @@ public void printPhoneSortingOptions() {
147151
}
148152

149153
private void sortIDByAscending() {
154+
appController.startDynamicSorting(Field.ID_NUMBER);
150155
System.out.println("Клиенты отсортированы по возрастанию ID");
151156
}
152157

153158
private void sortIDbyEven() {
159+
appController.startEvenIdsSorting();
154160
System.out.println("Клиенты отсортированы по четным ID");
155161
}
156162

@@ -180,7 +186,7 @@ private void fillRandom() {
180186

181187
private void printDefaultOrder() {
182188
System.out.println("Список клиентов");
183-
appController.showAllClientsInDefaultOrder();
189+
appController.startDefaultSorting();
184190
}
185191

186192
private void exitByChoice() {

src/main/java/userInterface/Printable.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ default void printFillingDatabaseMenu(){
1616
Заполнить базу данных:
1717
1) Ручной ввод
1818
2) Файлом
19-
3) Случайный набор\
19+
3) Случайный набор
2020
0) Возврат в главное меню"""
2121
);
2222
}
2323

2424
default void printSortingMenu(){
2525
System.out.println("""
2626
Выберите вариант:
27-
1) Отображать клиентов в порядке по умолчанию
28-
2) Сортировать по имени
29-
3) Сортировать по ID
30-
4) Сортировать по номеру телефона
27+
1) Базовая сортировка клиентов
28+
2) Сортировать клиентов по имени
29+
3) Сортировать клиентов по ID
30+
4) Сортировать клиентов по номеру телефона
3131
0) Возврат в главное меню"""
3232
);
3333
}

0 commit comments

Comments
 (0)