diff --git a/src/com/walking/lesson49_optional/task1/Main.java b/src/com/walking/lesson49_optional/task1/Main.java
index d4a54f35c..e440ddba6 100644
--- a/src/com/walking/lesson49_optional/task1/Main.java
+++ b/src/com/walking/lesson49_optional/task1/Main.java
@@ -1,5 +1,11 @@
package com.walking.lesson49_optional.task1;
+import com.walking.lesson49_optional.task1.model.Car;
+import com.walking.lesson49_optional.task1.service.CarService;
+
+import java.util.Optional;
+import java.util.Scanner;
+
/**
* Реализуйте задачу 2 урока 43:
* ...
@@ -8,5 +14,49 @@
*/
public class Main {
public static void main(String[] args) {
+ CarService carService = new CarService(initCars());
+
+ Car desiredCar = createCar();
+ Optional foundCar = carService.findCar(desiredCar);
+
+ String found = foundCar.map("Найдена машина:\n%s"::formatted)
+ .orElse("Подходящая машина не обнаружена");
+
+ System.out.println(found);
+ }
+
+ private static Car createCar() {
+ Scanner scanner = new Scanner(System.in);
+
+ System.out.println("Enter a car's number");
+ String number = scanner.nextLine();
+
+ System.out.println("Enter a car's color");
+ String color = scanner.nextLine();
+
+ System.out.println("Enter a car's year");
+ int year = scanner.nextInt();
+
+ System.out.println("Enter a actuality of technical inspection");
+ boolean actualTechnicalInspection = scanner.nextBoolean();
+
+ scanner.close();
+
+ return new Car(number, year, color, actualTechnicalInspection);
+ }
+
+ private static Car[] initCars() {
+ Car car1 = new Car("RR-111-RR", 2015, "yellow", true);
+ Car car2 = new Car("RR-222-RR", 2016, "yellow", true);
+ Car car3 = new Car("RR-333-RR", 2017, "yellow", true);
+ Car car4 = new Car("RR-444-RR", 2018, "yellow", true);
+ Car car5 = new Car("RR-555-RR", 2018, "yellow", true);
+ Car car6 = new Car("RR-777-RR", 2015, "yellow", true);
+ Car car7 = new Car("RR-777-RR", 2018, "yellow", true);
+ Car car8 = new Car("RR-888-RR", 2018, "yellow", true);
+ Car car9 = new Car("RR-999-RR", 2018, "yellow", true);
+ Car car10 = new Car("RR-000-RR", 2018, "yellow", true);
+
+ return new Car[]{car1, car2, car3, car4, car5, car6, car7, car8, car9, car10};
}
}
diff --git a/src/com/walking/lesson49_optional/task1/model/Car.java b/src/com/walking/lesson49_optional/task1/model/Car.java
new file mode 100644
index 000000000..354a1339c
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task1/model/Car.java
@@ -0,0 +1,45 @@
+package com.walking.lesson49_optional.task1.model;
+
+
+public class Car {
+ private final CarIdentifier identifier;
+
+ private String color;
+ private boolean actualTechnicalInspection;
+
+ public Car(String number, int year, String color, boolean actualTechnicalInspection) {
+ this(new CarIdentifier(number, year), color, actualTechnicalInspection);
+ }
+
+ public Car(CarIdentifier identifier, String color, boolean actualTechnicalInspection) {
+ this.identifier = identifier;
+ this.color = color;
+ this.actualTechnicalInspection = actualTechnicalInspection;
+ }
+
+ public CarIdentifier getIdentifier() {
+ return identifier;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public boolean isActualTechnicalInspection() {
+ return actualTechnicalInspection;
+ }
+
+ public void setActualTechnicalInspection(boolean actualTechnicalInspection) {
+ this.actualTechnicalInspection = actualTechnicalInspection;
+ }
+
+ @Override
+ public String toString() {
+ return "number: %s | year: %d | color: %s | actualTechnicalInspection: %s".formatted(identifier.getNumber(),
+ identifier.getYear(), color, actualTechnicalInspection ? "actual" : "not actual");
+ }
+}
\ No newline at end of file
diff --git a/src/com/walking/lesson49_optional/task1/model/CarIdentifier.java b/src/com/walking/lesson49_optional/task1/model/CarIdentifier.java
new file mode 100644
index 000000000..6007061c7
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task1/model/CarIdentifier.java
@@ -0,0 +1,44 @@
+package com.walking.lesson49_optional.task1.model;
+
+import java.util.Objects;
+
+public class CarIdentifier {
+ private final String number;
+ private final int year;
+
+ public CarIdentifier(String number, int year) {
+ this.number = number;
+ this.year = year;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || !getClass().equals(o.getClass())) {
+ return false;
+ }
+
+ CarIdentifier identifier = (CarIdentifier) o;
+
+ return year == identifier.year && Objects.equals(number, identifier.number);
+ }
+
+ @Override
+ public int hashCode() {
+ int hashcode = number.hashCode();
+ hashcode += 31 * year;
+
+ return hashcode;
+ }
+}
\ No newline at end of file
diff --git a/src/com/walking/lesson49_optional/task1/service/CarService.java b/src/com/walking/lesson49_optional/task1/service/CarService.java
new file mode 100644
index 000000000..41d09d31f
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task1/service/CarService.java
@@ -0,0 +1,24 @@
+package com.walking.lesson49_optional.task1.service;
+
+import com.walking.lesson49_optional.task1.model.Car;
+import com.walking.lesson49_optional.task1.model.CarIdentifier;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+public class CarService {
+ private final Map cars = new HashMap<>();
+
+ public CarService(Car[] cars) {
+ for (Car car : cars) {
+ this.cars.put(car.getIdentifier(), car);
+ }
+ }
+
+ public Optional findCar(Car car) {
+ return Optional.ofNullable(car)
+ .map(Car::getIdentifier)
+ .map(cars::get);
+ }
+}
diff --git a/src/com/walking/lesson49_optional/task2/Main.java b/src/com/walking/lesson49_optional/task2/Main.java
index 092a44e0d..bfa4a5230 100644
--- a/src/com/walking/lesson49_optional/task2/Main.java
+++ b/src/com/walking/lesson49_optional/task2/Main.java
@@ -1,5 +1,15 @@
package com.walking.lesson49_optional.task2;
+import com.walking.lesson49_optional.task2.model.Car;
+import com.walking.lesson49_optional.task2.model.CarIdentifier;
+import com.walking.lesson49_optional.task2.model.Home;
+import com.walking.lesson49_optional.task2.model.Person;
+import com.walking.lesson49_optional.task2.service.CarService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
/**
* Реализуйте рад классов:
* 1. Жилье, должен иметь поле «адрес»;
@@ -17,5 +27,33 @@
*/
public class Main {
public static void main(String[] args) {
+ Home testHome = new Home("ADDRESS");
+ Car testCar = new Car(new CarIdentifier("NUMBER", 2000), null, "red", true);
+ Person testCarOwner = new Person("OWNER", null, null, new ArrayList<>(), testHome, testCar, "fireman");
+ testCar.setOwner(testCarOwner);
+ Person testCarOwnerChild = new Person("CHILD", null, testCarOwner, null, testHome, null, "fireman");
+ testCarOwner.addChild(testCarOwnerChild);
+
+ CarService carService = new CarService(new Car[]{testCar});
+
+ Optional foundAddress = carService.findCar(testCar)
+ .filter(car -> car.getIdentifier()
+ .getYear() <= 2021)
+ .map(Car::getOwner)
+ .filter(person -> !person.getProfession()
+ .equals("policeman"))
+ .map(Person::getChildren)
+ .filter(list -> !list.isEmpty())
+ .map(List::getFirst)
+ .filter(person -> !person.getProfession()
+ .equals("policeman"))
+ .map(Person::getHome)
+ .map(Home::getAddress)
+ .filter(address -> !address.contains("Рублевское шоссе"));
+
+ String address = foundAddress.map("Найден адрес:\n%s"::formatted)
+ .orElse("Адресс не найден");
+
+ System.out.println(address);
}
}
diff --git a/src/com/walking/lesson49_optional/task2/model/Car.java b/src/com/walking/lesson49_optional/task2/model/Car.java
new file mode 100644
index 000000000..cd5a151c8
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task2/model/Car.java
@@ -0,0 +1,55 @@
+package com.walking.lesson49_optional.task2.model;
+
+
+public class Car {
+ private final CarIdentifier identifier;
+
+ private Person owner;
+ private String color;
+ private boolean actualTechnicalInspection;
+
+ public Car(String number, int year, Person owner, String color, boolean actualTechnicalInspection) {
+ this(new CarIdentifier(number, year), owner, color, actualTechnicalInspection);
+ }
+
+ public Car(CarIdentifier identifier, Person owner, String color, boolean actualTechnicalInspection) {
+ this.identifier = identifier;
+ this.owner = owner;
+ this.color = color;
+ this.actualTechnicalInspection = actualTechnicalInspection;
+ }
+
+ public CarIdentifier getIdentifier() {
+ return identifier;
+ }
+
+ public Person getOwner() {
+ return owner;
+ }
+
+ public void setOwner(Person owner) {
+ this.owner = owner;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public boolean isActualTechnicalInspection() {
+ return actualTechnicalInspection;
+ }
+
+ public void setActualTechnicalInspection(boolean actualTechnicalInspection) {
+ this.actualTechnicalInspection = actualTechnicalInspection;
+ }
+
+ @Override
+ public String toString() {
+ return "number: %s | year: %d | owner: %s | color: %s | actualTechnicalInspection: %s".formatted(identifier.getNumber(),
+ identifier.getYear(), owner.getName(), color, actualTechnicalInspection ? "actual" : "not actual");
+ }
+}
\ No newline at end of file
diff --git a/src/com/walking/lesson49_optional/task2/model/CarIdentifier.java b/src/com/walking/lesson49_optional/task2/model/CarIdentifier.java
new file mode 100644
index 000000000..3705af321
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task2/model/CarIdentifier.java
@@ -0,0 +1,44 @@
+package com.walking.lesson49_optional.task2.model;
+
+import java.util.Objects;
+
+public class CarIdentifier {
+ private final String number;
+ private final int year;
+
+ public CarIdentifier(String number, int year) {
+ this.number = number;
+ this.year = year;
+ }
+
+ public String getNumber() {
+ return number;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+
+ if (o == null || !getClass().equals(o.getClass())) {
+ return false;
+ }
+
+ CarIdentifier identifier = (CarIdentifier) o;
+
+ return year == identifier.year && Objects.equals(number, identifier.number);
+ }
+
+ @Override
+ public int hashCode() {
+ int hashcode = number.hashCode();
+ hashcode += 31 * year;
+
+ return hashcode;
+ }
+}
\ No newline at end of file
diff --git a/src/com/walking/lesson49_optional/task2/model/Home.java b/src/com/walking/lesson49_optional/task2/model/Home.java
new file mode 100644
index 000000000..96d45f068
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task2/model/Home.java
@@ -0,0 +1,13 @@
+package com.walking.lesson49_optional.task2.model;
+
+public class Home {
+ private final String address;
+
+ public Home(String address) {
+ this.address = address;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+}
diff --git a/src/com/walking/lesson49_optional/task2/model/Person.java b/src/com/walking/lesson49_optional/task2/model/Person.java
new file mode 100644
index 000000000..c07373e34
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task2/model/Person.java
@@ -0,0 +1,57 @@
+package com.walking.lesson49_optional.task2.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Person {
+ private final String name;
+ private final Person mother;
+ private final Person father;
+ private List children = new ArrayList<>();
+ private final Home home;
+ private final Car car;
+ private final String profession;
+
+ public Person(String name, Person mother, Person father, List children, Home home, Car car,
+ String profession) {
+ this.name = name;
+ this.mother = mother;
+ this.father = father;
+ this.children = children;
+ this.home = home;
+ this.car = car;
+ this.profession = profession;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Person getMother() {
+ return mother;
+ }
+
+ public Person getFather() {
+ return father;
+ }
+
+ public List getChildren() {
+ return children;
+ }
+
+ public void addChild(Person child) {
+ children.add(child);
+ }
+
+ public Home getHome() {
+ return home;
+ }
+
+ public Car getCar() {
+ return car;
+ }
+
+ public String getProfession() {
+ return profession;
+ }
+}
diff --git a/src/com/walking/lesson49_optional/task2/service/CarService.java b/src/com/walking/lesson49_optional/task2/service/CarService.java
new file mode 100644
index 000000000..bb33e6379
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task2/service/CarService.java
@@ -0,0 +1,24 @@
+package com.walking.lesson49_optional.task2.service;
+
+import com.walking.lesson49_optional.task2.model.Car;
+import com.walking.lesson49_optional.task2.model.CarIdentifier;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+public class CarService {
+ private final Map cars = new HashMap<>();
+
+ public CarService(Car[] cars) {
+ for (Car car : cars) {
+ this.cars.put(car.getIdentifier(), car);
+ }
+ }
+
+ public Optional findCar(Car car) {
+ return Optional.ofNullable(car)
+ .map(Car::getIdentifier)
+ .map(cars::get);
+ }
+}
diff --git a/src/com/walking/lesson49_optional/task3/Main.java b/src/com/walking/lesson49_optional/task3/Main.java
index ccda944bc..4acc4cb90 100644
--- a/src/com/walking/lesson49_optional/task3/Main.java
+++ b/src/com/walking/lesson49_optional/task3/Main.java
@@ -1,5 +1,14 @@
package com.walking.lesson49_optional.task3;
+import com.walking.lesson49_optional.task3.model.Animal;
+import com.walking.lesson49_optional.task3.model.Cat;
+import com.walking.lesson49_optional.task3.model.Cow;
+import com.walking.lesson49_optional.task3.model.Dog;
+
+import java.util.Optional;
+
+import static java.util.AbstractMap.*;
+
/**
* Реализуйте абстрактный класс «Животное», содержащий абстрактный метод sound().
* Также реализуйте трех наследников: кота, собаку и корову.
@@ -14,5 +23,32 @@
*/
public class Main {
public static void main(String[] args) {
+ Animal[] animals = new Animal[]{new Cat(), new Dog(), new Cow(), null};
+
+ for (Animal animal : animals) {
+ printAnimal(animal);
+
+ }
+ }
+
+ private static void printAnimal(Animal animal) {
+ Optional.ofNullable(animal)
+ .filter(x -> x instanceof Cat)
+ .map(x -> new SimpleEntry<>("Cat", x.sound()))
+ .or(() -> Optional.ofNullable(animal)
+ .filter(x -> x instanceof Dog)
+ .map(x -> new SimpleEntry<>("Dog", x.sound())))
+ .or(() -> Optional.ofNullable(animal)
+ .filter(x -> x instanceof Cow)
+ .map(x -> new SimpleEntry<>("Cow", x.sound())))
+ .map(x -> "Это %s, он (она) говорит %s".formatted(x.getKey(), x.getValue()))
+ .ifPresentOrElse(System.out::println, () -> System.out.println("Это неизвестное животное"));
+ }
+
+ private static void printAnimal1(Animal animal) {
+ Optional.ofNullable(animal)
+ .map(x -> "Это %s, он (она) говорит %s".formatted(x.getClass()
+ .getSimpleName(), x.sound()))
+ .ifPresentOrElse(System.out::println, () -> System.out.println("Это неизвестное животное"));
}
}
diff --git a/src/com/walking/lesson49_optional/task3/model/Animal.java b/src/com/walking/lesson49_optional/task3/model/Animal.java
new file mode 100644
index 000000000..594c5438b
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task3/model/Animal.java
@@ -0,0 +1,5 @@
+package com.walking.lesson49_optional.task3.model;
+
+public abstract class Animal {
+ public abstract String sound();
+}
diff --git a/src/com/walking/lesson49_optional/task3/model/Cat.java b/src/com/walking/lesson49_optional/task3/model/Cat.java
new file mode 100644
index 000000000..cb3fd0677
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task3/model/Cat.java
@@ -0,0 +1,8 @@
+package com.walking.lesson49_optional.task3.model;
+
+public class Cat extends Animal {
+ @Override
+ public String sound() {
+ return "mau";
+ }
+}
diff --git a/src/com/walking/lesson49_optional/task3/model/Cow.java b/src/com/walking/lesson49_optional/task3/model/Cow.java
new file mode 100644
index 000000000..5b2f2f77e
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task3/model/Cow.java
@@ -0,0 +1,8 @@
+package com.walking.lesson49_optional.task3.model;
+
+public class Cow extends Animal {
+ @Override
+ public String sound() {
+ return "muuu";
+ }
+}
diff --git a/src/com/walking/lesson49_optional/task3/model/Dog.java b/src/com/walking/lesson49_optional/task3/model/Dog.java
new file mode 100644
index 000000000..fcf628928
--- /dev/null
+++ b/src/com/walking/lesson49_optional/task3/model/Dog.java
@@ -0,0 +1,8 @@
+package com.walking.lesson49_optional.task3.model;
+
+public class Dog extends Animal {
+ @Override
+ public String sound() {
+ return "voof";
+ }
+}