Работа со stream Api в курсе объектно-ориентированного программирования
Автор: Danya17bobrov • Ноябрь 24, 2022 • Лабораторная работа • 5,658 Слов (23 Страниц) • 168 Просмотры
Министерство образования Республики Беларусь
Учреждение образования
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОТЕХНИКИ
Факультет компьютерного проектирования
Кафедра проектирования информационно-компьютерных систем
ОТЧЁТ
По лабораторной работе №12
на тему
Stream API
по дисциплине «ООПиП»
Выполнил студент: Бобров Д.С.
Проверил: Куприянов Н.И.
Минск 2022
Вариант 1. Мобильная связь. Определить иерархию тарифов мобильной компании. Создать список тарифов компании. Подсчитать общую численность клиентов. Исходя из темы варианта задания лабораторной работы №1 и исходного кода по этой лабораторной необходимо:
- Используя Stream API, необходимо добавить функции фильтрации по разным критериям. Также необходимо реализовать возможность использования нескольких фильтров сразу. Если были применены фильтры, то программа продолжает работу с отфильтрованными данными
Класс main()
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Objects;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
private static boolean filterByAge = false;
private static boolean filterByRates = false;
private static int choiceFilterByRates = 1;
private static int choiceFilterByAge = 1;
public static void main(String[] args) {
System.out.println("Welcome!");
String[] options = {"1- Show_all_rates", "2- Connecting a new subscriber", "3- Show_all_users", "4- Output the number of users", "5- filter by age", "6- filter by rates", "0- Exit",};
ArrayList<Users> usersList = new ArrayList<>();
ArrayList<Users> usersListSavedAll = new ArrayList<>();
ArrayList<Rates> rates = new ArrayList<>();
rates.add(new Rates("Premium", "unlimited", 10, "25 megabytes per second", 1000, "Free music, free TV, freezing for 6 months", 500));
rates.add(new Rates("Standart", "10gb", 5, "15 megabytes per second", 350, "Freezing for 3 months", 300));
rates.add(new Rates("Minimum", "3gb", 2, "10 megabytes per second", 150, "Freezing for 1 months", 150));
Scanner scanner = new Scanner(System.in);// класс Scanner подключается к источнику данных: System.in для ввода данных из консоли
int option = 1;
while (option != 0) {
printMenu(options);
try {
option = scanner.nextInt();
switch (option) {
case 1:
Show_all_rates(rates);
break;
case 2:
Connect_new_ubscriber(scanner, usersList, usersListSavedAll);
break;
case 3:
Show_all_users(usersList);
break;
case 4:
CounterUsers(usersList);
break;
case 5:
usersList = filtrationByAge(usersList);
break;
case 6:
usersList = filtrationByRates(usersList);
break;
case 7:
usersList = cancelingFiltering(usersList, usersListSavedAll);
break;
case 0:
exit();
}
} catch (InputMismatchException e) {
System.out.println("Enter correct value!");
scanner.nextLine();
}
}
}
public static void printMenu(String[] options) {
// Оператор for-each перебирает все элементы массива(option - элемент массива)
for (String option : options) {
System.out.println(option);
}
System.out.print("Choose your option : ");
}
//Показ всех тарифов
public static void Show_all_rates(ArrayList<Rates> rates) {
rates.stream().forEach(n -> System.out.println(n));
}
;
/*public static void Show_all_rates(ArrayList<Rates> rates) {
for (Rates rate : rates)
{
System.out.println(rate.toString());
}
}*/
//Подключение нового пользователя
public static void Connect_new_ubscriber(Scanner scanner, ArrayList<Users> usersList, ArrayList<Users> usersArrayListSaved) {
System.out.println("Connecting a new subscriber ");
System.out.println(" Enter family ");
String surename = scanner.next();
System.out.println(" Enter name ");
String name = scanner.next();
System.out.println(" Enter patronymic ");
String patronymic = scanner.next();
System.out.println(" Enter age ");
int age = scanner.nextInt();
String rate = chooseRate(scanner);
Users user = new Users(surename, name, patronymic, age, rate);
usersList.add(user);
usersArrayListSaved.add(user);
System.out.println("User is added");
}
//Счётчик количества пользователей
public static void CounterUsers(ArrayList<Users> userList) {
int counter = 0;
CountUsers count;
count = (a, b) -> (a + b);
/* for (int i = 0; i < userList.size(); i++) {
counter=count.usersCount(counter,1);
}*/
int i = 0;
while (i < userList.size()) {
counter = count.usersCount(counter, 1);
i++;
System.out.println(i);
}
System.out.println("Total Users: " + counter);
}
//Выбор тарифного плана
public static String chooseRate(Scanner scanner) {
System.out.println("Choose rate:");
System.out.println("1 - Premium\n" + "2 - Standart\n" + "3 - Minimum");
while (true) {
try {
int choose = scanner.nextInt();
if (choose > 3 || choose < 1) {
continue;
}
if (choose == 1) {
return "Premium";
} else if (choose == 2) {
return "Standard";
} else {
return "Minimum";
}
} catch (InputMismatchException e) {
System.out.println("Enter correct value!");
}
}
}
//Показ всех пользователей
public static void Show_all_users(ArrayList<Users> usersList) {
for (Users user : usersList) {
System.out.println(user.toString());
}
int count = usersList.toArray().length;
System.out.println("total users: " + count);
}
//Организация выхода из программы
private static void exit() {
System.out.println("***Goodbye! Come to us soon!***");
System.exit(0);
}
//фильтрация по возрасту
public static ArrayList<Users> filtrationByAge(ArrayList<Users> usersArrayList) {
System.out.println("1 - Young age(18-44)" + " 2 - Middle age(45-59)" + " 3 - Old age(60-74)" + " 4 - Senile age(75-90)" + " 5 - Centenarians(90+)");
Scanner scanner = new Scanner(System.in);
try {
choiceFilterByAge = scanner.nextInt();
Stream<Users> stream = usersArrayList.stream();
ArrayList<?> list = null;
switch (choiceFilterByAge) {
case 1:
list = (ArrayList<?>) stream.filter(x -> x.getAge() > 17 && x.getAge() < 45).collect(Collectors.toList());
break;
case 2:
list = (ArrayList<?>) stream.filter(x -> x.getAge() > 44 && x.getAge() < 60).collect(Collectors.toList());
break;
case 3:
list = (ArrayList<?>) stream.filter(x -> x.getAge() > 59 && x.getAge() < 75).collect(Collectors.toList());
break;
case 4:
list = (ArrayList<?>) stream.filter(x -> x.getAge() > 74 && x.getAge() < 91).collect(Collectors.toList());
break;
case 5:
list = (ArrayList<?>) stream.filter(x -> x.getAge() > 90).collect(Collectors.toList());
break;
}
list.forEach(x -> System.out.println(x.toString()));
usersArrayList = (ArrayList<Users>) list;
System.out.println(usersArrayList);
} catch (InputMismatchException e) {
System.out.println("Enter correct value!");
scanner.nextLine();
}
filterByAge = true;
return usersArrayList;
}
//Фильтрация по тарифу
public static ArrayList<Users> filtrationByRates(ArrayList<Users> usersArrayList) {
System.out.println("1 - Premium users" + " 2 - Standard Users" + " 3 - Minimum Users");
Scanner scanner = new Scanner(System.in);
try {
choiceFilterByRates = scanner.nextInt();
Stream<Users> stream = usersArrayList.stream();
ArrayList<?> list = null;
switch (choiceFilterByRates) {
case 1:
list = (ArrayList<?>) stream.filter(x -> Objects.equals(x.getRate(), "Premium")).collect(Collectors.toList());
break;
case 2:
list = (ArrayList<?>) stream.filter(x -> Objects.equals(x.getRate(), "Standard")).collect(Collectors.toList());
break;
case 3:
list = (ArrayList<?>) stream.filter(x -> Objects.equals(x.getRate(), "Minimum")).collect(Collectors.toList());
break;
}
list.forEach(x -> System.out.println(x.toString()));
usersArrayList = (ArrayList<Users>) list;
System.out.println(usersArrayList);
} catch (InputMismatchException e) {
System.out.println("Enter correct value!");
scanner.nextLine();
}
filterByRates = true;
return usersArrayList;
}
//Отмена фильтрации
public static ArrayList<Users> cancelingFiltering(ArrayList<Users> usersArrayList, ArrayList<Users> usersArrayListSavedAll) {
System.out.println("1 - cancel all filters" + " 2 - cancel age filtering" + " 3 - cancel rates filtering");
Scanner scanner = new Scanner(System.in);
int choise = 1;
try {
choise = scanner.nextInt();
switch (choise) {
case 1:
//отменить все фильтры
usersArrayList = usersArrayListSavedAll;
System.out.println(usersArrayList);
case 2:
//отменить фильтрацию по возрасту
if (filterByAge)
{
if (filterByRates)
{
switch (choiceFilterByRates) {
case 1:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> Objects.equals(x.getRate(), "Premium")).collect(Collectors.toList());
break;
case 2:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> Objects.equals(x.getRate(), "Standard")).collect(Collectors.toList());
break;
case 3:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> Objects.equals(x.getRate(), "Minimum")).collect(Collectors.toList());
break;
}
}
else
{
usersArrayList = usersArrayListSavedAll;
}
filterByAge = false;
}
break;
case 3:
//отменить фильтрацию по тарифу;
if (filterByRates)
{
if (filterByAge)
{
switch (choiceFilterByAge) {
case 1:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> x.getAge() > 17 && x.getAge() < 45).collect(Collectors.toList());
break;
case 2:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> x.getAge() > 44 && x.getAge() < 60).collect(Collectors.toList());
break;
case 3:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> x.getAge() > 59 && x.getAge() < 75).collect(Collectors.toList());
break;
case 4:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> x.getAge() > 74 && x.getAge() < 91).collect(Collectors.toList());
break;
case 5:
usersArrayList = (ArrayList<Users>) usersArrayListSavedAll.stream().filter(x -> x.getAge() > 90).collect(Collectors.toList());
break;
}
}
else
{
usersArrayList = usersArrayListSavedAll;
}
filterByRates = false;
}
break;
}
} catch (InputMismatchException e) {
System.out.println("Enter correct value!");
scanner.nextLine();
}
return usersArrayList;
}
}
...