├── src ├── package-info.java └── com │ └── walking │ ├── lesson171_annotations │ ├── task1 │ │ ├── DeprecatedTestClass.java │ │ └── Main.java │ ├── task3 │ │ ├── model1 │ │ │ ├── B.java │ │ │ ├── A.java │ │ │ └── C.java │ │ ├── annotation │ │ │ └── Component.java │ │ ├── model3 │ │ │ ├── G.java │ │ │ └── F.java │ │ └── model2 │ │ │ ├── D.java │ │ │ └── E.java │ └── task2 │ │ └── annotation │ │ ├── Id.java │ │ ├── Table.java │ │ └── Column.java │ ├── lesson46_lambda │ ├── task2 │ │ ├── model │ │ │ ├── Animal.java │ │ │ ├── Cat.java │ │ │ ├── Cow.java │ │ │ └── Dog.java │ │ └── Main.java │ └── task3 │ │ ├── domain │ │ ├── filter │ │ │ ├── CarFilter.java │ │ │ ├── ColorCarFilter.java │ │ │ ├── NumberCarFilter.java │ │ │ ├── NumberSubstringCarFilter.java │ │ │ └── DateBetweenCarFilter.java │ │ └── MainMenuItem.java │ │ └── service │ │ ├── InputService.java │ │ ├── CarService.java │ │ ├── InputValidationService.java │ │ └── MenuMappingService.java │ ├── lesson49_optional │ ├── task3 │ │ └── model │ │ │ ├── Animal.java │ │ │ ├── Cat.java │ │ │ ├── Cow.java │ │ │ └── Dog.java │ ├── task2 │ │ ├── model │ │ │ ├── OccupationType.java │ │ │ └── Habitation.java │ │ └── service │ │ │ ├── CarService.java │ │ │ └── SearchHabitationService.java │ └── task1 │ │ └── service │ │ └── CarService.java │ ├── lesson16_abstract_class_interface │ ├── task2 │ │ └── answer │ │ │ ├── Answer.java │ │ │ └── impl │ │ │ ├── HiAnswer.java │ │ │ ├── UnknownAnswer.java │ │ │ ├── HowAreYouAnswer.java │ │ │ └── ByeAnswer.java │ ├── task3 │ │ ├── model │ │ │ ├── Cat.java │ │ │ ├── Cow.java │ │ │ ├── Dog.java │ │ │ └── Animal.java │ │ └── Main.java │ ├── task1_interface │ │ └── model │ │ │ └── EquilateralShape.java │ └── task1_abstract_class │ │ └── model │ │ ├── EquilateralShape.java │ │ └── EquilateralTriangle.java │ ├── lesson60_thread │ ├── task2 │ │ └── service │ │ │ ├── ArrayFillingService.java │ │ │ ├── IntRandomGenerator.java │ │ │ ├── SingleThreadArrayFillingService.java │ │ │ └── ThreadByRowArrayFillingService.java │ ├── task4 │ │ ├── Main.java │ │ └── CallableThread.java │ ├── task1 │ │ └── Main.java │ └── task3 │ │ ├── Main.java │ │ └── CallableThread.java │ ├── lesson25_nested_classes │ ├── task2 │ │ ├── inner_class │ │ │ ├── Animal.java │ │ │ └── Main.java │ │ ├── static_class │ │ │ ├── Animal.java │ │ │ └── Main.java │ │ └── anonymous_class │ │ │ └── Animal.java │ └── task1 │ │ ├── inner_class │ │ └── EquilateralShape.java │ │ ├── static_class │ │ └── EquilateralShape.java │ │ └── anonymous_class │ │ └── EquilateralShape.java │ ├── lesson75_thread_pool │ ├── task3 │ │ ├── service │ │ │ ├── ArrayFillingService.java │ │ │ └── IntRandomGenerator.java │ │ └── Main.java │ └── task1 │ │ └── Main.java │ ├── lesson13_inheritance │ ├── task1 │ │ ├── model │ │ │ ├── Animal.java │ │ │ ├── Cat.java │ │ │ └── Dog.java │ │ └── Main.java │ └── task2 │ │ └── model │ │ ├── Cow.java │ │ ├── Dog.java │ │ ├── Cat.java │ │ └── Animal.java │ ├── lesson14_polymorphism │ ├── task2 │ │ ├── model │ │ │ ├── Cow.java │ │ │ ├── Cat.java │ │ │ ├── Dog.java │ │ │ └── Animal.java │ │ └── Main.java │ └── task1 │ │ └── model │ │ └── EquilateralShape.java │ ├── lesson41_set │ ├── task1 │ │ ├── service │ │ │ ├── TaskService.java │ │ │ └── IteratorBasedTaskService.java │ │ └── Main.java │ └── task2 │ │ └── Main.java │ ├── lesson30_regex │ ├── task4 │ │ ├── parser │ │ │ ├── AbstractParser.java │ │ │ ├── TextParser.java │ │ │ ├── ParagraphParser.java │ │ │ └── SentenceParser.java │ │ ├── joiner │ │ │ ├── AbstractJoiner.java │ │ │ ├── ParagraphJoiner.java │ │ │ ├── SentenceJoiner.java │ │ │ └── TextJoiner.java │ │ ├── exception │ │ │ └── RegexValidationException.java │ │ ├── model │ │ │ └── TextElement.java │ │ └── service │ │ │ ├── JoinerService.java │ │ │ └── ParserService.java │ ├── task2 │ │ ├── exception │ │ │ └── RegexValidationException.java │ │ └── model │ │ │ └── FullName.java │ └── task3 │ │ └── exception │ │ └── RegexValidationException.java │ ├── lesson47_method_reference │ ├── task3 │ │ ├── domain │ │ │ ├── filter │ │ │ │ ├── CarFilter.java │ │ │ │ ├── ColorCarFilter.java │ │ │ │ ├── NumberCarFilter.java │ │ │ │ ├── NumberSubstringCarFilter.java │ │ │ │ └── DateBetweenCarFilter.java │ │ │ └── MainMenuItem.java │ │ └── service │ │ │ ├── InputService.java │ │ │ ├── CarService.java │ │ │ ├── InputValidationService.java │ │ │ └── MenuMappingService.java │ ├── task1 │ │ └── Main.java │ └── task2 │ │ └── Main.java │ ├── lesson20_exceptions │ ├── task3 │ │ ├── model │ │ │ ├── Cat.java │ │ │ ├── Cow.java │ │ │ ├── Dog.java │ │ │ └── Animal.java │ │ └── exception │ │ │ ├── UnknownAnimalException.java │ │ │ └── ArrayValidationException.java │ ├── task1_catchException │ │ ├── model │ │ │ ├── MediaType.java │ │ │ └── File.java │ │ └── service │ │ │ └── FileService.java │ ├── task1_throwsException │ │ ├── model │ │ │ ├── MediaType.java │ │ │ └── File.java │ │ └── service │ │ │ └── FileService.java │ └── task2 │ │ ├── exception │ │ └── InputValidationException.java │ │ └── model │ │ ├── EquilateralShape.java │ │ └── EquilateralTriangle.java │ ├── lesson28_generics1 │ ├── task3 │ │ ├── exception │ │ │ └── ElementNotFoundException.java │ │ ├── service │ │ │ └── SearchService.java │ │ └── Main.java │ ├── task4 │ │ └── exception │ │ │ └── ElementNotFoundException.java │ ├── task2 │ │ ├── model │ │ │ └── NotNullObject.java │ │ └── Main.java │ └── task1 │ │ └── model │ │ └── NumberExponentiater.java │ ├── lesson40_queue2 │ ├── model │ │ └── Task.java │ ├── service │ │ └── TaskService.java │ └── Main.java │ ├── lesson18_instanceof_getClass │ ├── task1_getClass │ │ └── model │ │ │ ├── Cat.java │ │ │ ├── Dog.java │ │ │ ├── Cow.java │ │ │ └── Animal.java │ └── task1_instanceof │ │ └── model │ │ ├── Cat.java │ │ ├── Cow.java │ │ ├── Dog.java │ │ └── Animal.java │ ├── lesson43_map │ ├── task1 │ │ └── exception │ │ │ └── RegexValidationException.java │ └── task2 │ │ └── service │ │ └── CarService.java │ ├── lesson29_generics2 │ ├── task1 │ │ ├── model │ │ │ └── Generic.java │ │ └── Main.java │ └── task2 │ │ ├── model │ │ └── NumberExponentiater.java │ │ └── Main.java │ ├── lesson57_stream_collect_collector │ ├── task │ │ ├── StatisticTask.java │ │ ├── Task7.java │ │ ├── Task8.java │ │ ├── Task1.java │ │ ├── Task4.java │ │ ├── Task13.java │ │ ├── Task6.java │ │ ├── Task10.java │ │ ├── Task2.java │ │ ├── Task18.java │ │ ├── Task14.java │ │ ├── Task11.java │ │ ├── Task21.java │ │ ├── Task19.java │ │ ├── Task5.java │ │ ├── Task3.java │ │ └── Task16.java │ ├── Main.java │ └── model │ │ ├── Department.java │ │ └── Employee.java │ ├── lesson72_blocking_non_blocking_queue │ ├── task1 │ │ ├── model │ │ │ └── Task.java │ │ └── service │ │ │ └── TaskService.java │ ├── task3 │ │ ├── service │ │ │ ├── TaskService.java │ │ │ └── IntRandomGenerator.java │ │ └── model │ │ │ └── Task.java │ └── task2 │ │ └── service │ │ ├── MessageSendingService.java │ │ └── MessageReceivingService.java │ ├── lesson1_varaibles │ ├── Task2String.java │ ├── Task2SingleChar.java │ ├── Task1.java │ ├── Task1WithoutAdditionalVar.java │ ├── Task2MultipleChar.java │ ├── Task2ComplicatedWithString.java │ └── Task2ComplicatedWithChar.java │ ├── lesson31_io_streams │ └── exception │ │ └── CastingException.java │ ├── lesson39_queue1 │ ├── task2 │ │ ├── collection │ │ │ └── Stack.java │ │ └── Main.java │ ├── task4 │ │ ├── collection │ │ │ └── Queue.java │ │ └── Main.java │ ├── util │ │ └── CollectionUtils.java │ └── task3 │ │ └── Main.java │ ├── lesson65_atomics │ └── task1 │ │ ├── Main.java │ │ └── service │ │ └── CounterStorageService.java │ ├── lesson5_arrays │ ├── Task1WithoutString.java │ ├── Task1WithString.java │ └── Task2.java │ ├── lesson62_wait_notify │ ├── task2 │ │ ├── model │ │ │ ├── ProductBuyer.java │ │ │ ├── ProductSupplier.java │ │ │ └── WholesaleBase.java │ │ └── service │ │ │ └── IntRandomGenerator.java │ └── task1 │ │ └── service │ │ ├── MessageHolder.java │ │ ├── MessageReceivingService.java │ │ └── MessageSendingService.java │ ├── lesson73_barrier │ └── task1 │ │ ├── service │ │ └── IntRandomGenerator.java │ │ └── model │ │ └── Friend.java │ ├── lesson64_thread_methods │ ├── task2_1 │ │ └── service │ │ │ ├── IntRandomGenerator.java │ │ │ └── ArrayFillingService.java │ ├── task2_2 │ │ └── service │ │ │ ├── IntRandomGenerator.java │ │ │ └── ArrayFillingService.java │ ├── task2_3 │ │ └── service │ │ │ ├── IntRandomGenerator.java │ │ │ └── ArrayFillingService.java │ └── task1 │ │ └── Main.java │ ├── lesson4_cycles │ ├── Task5Var1.java │ ├── Task5Var2.java │ ├── Task1.java │ └── Task2.java │ ├── lesson17_enum │ ├── task2 │ │ ├── animal │ │ │ └── AnimalType.java │ │ └── Main.java │ └── task1 │ │ └── Main.java │ ├── lesson67_locks │ ├── task3 │ │ └── model │ │ │ └── LockingCounter.java │ ├── task2_2 │ │ ├── model │ │ │ └── Accident.java │ │ └── Main.java │ ├── task2_1 │ │ ├── model │ │ │ └── Accident.java │ │ └── Main.java │ └── task1 │ │ └── service │ │ ├── MessageReceivingService.java │ │ └── MessageSendingService.java │ ├── lesson8_classes_objects │ └── Counter.java │ ├── lesson7_varargs_overloading │ ├── Task1.java │ └── Task3.java │ ├── lesson37_collection_list │ └── task1 │ │ └── model │ │ └── Counter.java │ ├── lesson10_static_constants │ └── task2 │ │ ├── Counter.java │ │ └── Main.java │ ├── lesson34_date_time │ └── task1 │ │ └── Main.java │ ├── lesson52_stream_creation │ ├── task2_limit │ │ └── Main.java │ ├── task1 │ │ └── Main.java │ ├── task2_iterate │ │ └── Main.java │ └── task3_flatMap │ │ └── Main.java │ ├── lesson68_semaphore │ ├── task3 │ │ └── model │ │ │ └── Philosopher.java │ ├── task1 │ │ └── model │ │ │ └── Philosopher.java │ └── task2 │ │ └── model │ │ └── Philosopher.java │ ├── lesson21_immutable_object │ └── service │ │ └── CarService.java │ ├── lesson42_tree │ └── task2 │ │ └── Main.java │ ├── lesson58_collection_lamda_param │ ├── task1 │ │ └── Main.java │ ├── task2 │ │ └── Main.java │ └── task3 │ │ └── Main.java │ ├── lesson19_object_methods │ └── service │ │ └── CarService.java │ └── lesson6_methods │ ├── Task2.java │ └── Task1.java ├── .gitignore └── resources ├── files ├── lesson32 │ ├── task2 │ │ └── carCatalog.txt │ ├── task1 │ │ └── carCatalog.txt │ └── task3 │ │ └── carCatalog.txt └── lesson33 │ ├── task2 │ └── carCatalog.txt │ └── task1 │ └── carCatalog.txt └── sql ├── lesson_89_aggregation_group_by └── tasks.sql ├── lesson_88_sorting_pagination └── tasks.sql ├── lesson_90_having └── tasks.sql ├── lesson_85_select └── tasks.sql ├── lesson_94_distinct └── tasks.sql ├── lesson_86_where └── tasks.sql ├── lesson_97_join └── tasks.sql ├── lesson_95_union └── tasks.sql ├── lesson_87_where_clause_operators └── tasks.sql ├── lesson_101_pk_fk └── tasks.sql └── lesson_105_index └── tasks.sql /src/package-info.java: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Project exclude paths 2 | /out/ -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task1/DeprecatedTestClass.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task1; 2 | 3 | @Deprecated 4 | public class DeprecatedTestClass { 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task2/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task2.model; 2 | 3 | public abstract class Animal { 4 | public abstract void sound(); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task3/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task3.model; 2 | 3 | public abstract class Animal { 4 | public abstract String sound(); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task2/answer/Answer.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task2.answer; 2 | 3 | public interface Answer { 4 | String getAnswer(); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task2/service/ArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task2.service; 2 | 3 | public interface ArrayFillingService { 4 | int[][] fill(int[][] array); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task2/model/OccupationType.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task2.model; 2 | 3 | public enum OccupationType { 4 | POLICEMAN, TEACHER, BUILDER, ENGINEER, UNEMPLOYED 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task2/inner_class/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task2.inner_class; 2 | 3 | 4 | public abstract class Animal { 5 | public abstract void sound(); 6 | } 7 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task2/static_class/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task2.static_class; 2 | 3 | 4 | public abstract class Animal { 5 | public abstract void sound(); 6 | } 7 | -------------------------------------------------------------------------------- /src/com/walking/lesson75_thread_pool/task3/service/ArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson75_thread_pool.task3.service; 2 | 3 | public interface ArrayFillingService { 4 | int[][] fill(int[][] array); 5 | } 6 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task2/anonymous_class/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task2.anonymous_class; 2 | 3 | 4 | public abstract class Animal { 5 | public abstract void sound(); 6 | } 7 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task1/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task1.model; 2 | 3 | public class Animal { 4 | protected Animal() { 5 | System.out.println("I’m an animal"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model1/B.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.model1; 2 | 3 | import com.walking.lesson171_annotations.task3.annotation.Component; 4 | 5 | @Component 6 | public class B { 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task3/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task3.model; 2 | 3 | public class Cat extends Animal { 4 | @Override 5 | public String sound() { 6 | return "meow"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task3/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task3.model; 2 | 3 | public class Cow extends Animal { 4 | @Override 5 | public String sound() { 6 | return "moo"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task3/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task3.model; 2 | 3 | public class Dog extends Animal { 4 | @Override 5 | public String sound() { 6 | return "woof"; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task2/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task2.model; 2 | 3 | public class Cat extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("meow"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task2/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task2.model; 2 | 3 | public class Cow extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("moo"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task2/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task2.model; 2 | 3 | public class Dog extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("woof"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson14_polymorphism/task2/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson14_polymorphism.task2.model; 2 | 3 | public class Cow extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("moo"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson14_polymorphism/task2/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson14_polymorphism.task2.model; 2 | 3 | public class Cat extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("meow"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson14_polymorphism/task2/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson14_polymorphism.task2.model; 2 | 3 | public class Dog extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("woof"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/domain/filter/CarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.domain.filter; 2 | 3 | import com.walking.lesson46_lambda.task3.model.Car; 4 | 5 | public interface CarFilter { 6 | boolean filter(Car car); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task3/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task3.model; 2 | 3 | public class Cat extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("meow"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task3/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task3.model; 2 | 3 | public class Cow extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("moo"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task3/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task3.model; 2 | 3 | public class Dog extends Animal { 4 | @Override 5 | public void sound() { 6 | System.out.println("woof"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson41_set/task1/service/TaskService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson41_set.task1.service; 2 | 3 | import com.walking.lesson41_set.task1.model.Task; 4 | 5 | public interface TaskService { 6 | Task add(Task task); 7 | 8 | void complete(); 9 | } 10 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/parser/AbstractParser.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.parser; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public abstract class AbstractParser { 6 | public abstract TextElement parse(TextElement str); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/domain/filter/CarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.domain.filter; 2 | 3 | import com.walking.lesson47_method_reference.task3.model.Car; 4 | 5 | public interface CarFilter { 6 | boolean filter(Car car); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson14_polymorphism/task2/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson14_polymorphism.task2.model; 2 | 3 | public class Animal { 4 | 5 | protected Animal() {} 6 | 7 | public void sound() { 8 | System.out.println("Unknown animal!"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task3/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task3.model; 2 | 3 | public class Cat extends Animal { 4 | public Cat() { 5 | super("meow"); 6 | } 7 | 8 | public void meow() { 9 | sound(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task3/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task3.model; 2 | 3 | public class Cow extends Animal { 4 | 5 | public Cow() { 6 | super("moo"); 7 | } 8 | 9 | public void moo() { 10 | sound(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task3/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task3.model; 2 | 3 | public class Dog extends Animal { 4 | public Dog() { 5 | super("woof"); 6 | } 7 | 8 | public void woof() { 9 | sound(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/joiner/AbstractJoiner.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.joiner; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public abstract class AbstractJoiner { 6 | public abstract String join(TextElement[] elements); 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task3/exception/UnknownAnimalException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task3.exception; 2 | 3 | public class UnknownAnimalException extends RuntimeException { 4 | public UnknownAnimalException(String message) { 5 | super(message); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model1/A.java: -------------------------------------------------------------------------------- 1 | // Модели разделены на два пакета исключительно в демонстрационных целях 2 | package com.walking.lesson171_annotations.task3.model1; 3 | 4 | import com.walking.lesson171_annotations.task3.annotation.Component; 5 | 6 | @Component 7 | public class A { 8 | } 9 | -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task3/exception/ElementNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task3.exception; 2 | 3 | public class ElementNotFoundException extends RuntimeException { 4 | public ElementNotFoundException() { 5 | super("Desired element not found"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task4/exception/ElementNotFoundException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task4.exception; 2 | 3 | public class ElementNotFoundException extends RuntimeException { 4 | public ElementNotFoundException() { 5 | super("Desired element not found"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/domain/MainMenuItem.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.domain; 2 | 3 | public enum MainMenuItem { 4 | SEARCH_BY_NUMBER, 5 | SEARCH_BY_NUMBER_SUBSTRING, 6 | SEARCH_BY_COLOR, 7 | SEARCH_BY_YEAR_BETWEEN, 8 | EXIT, 9 | INCORRECT_CHOICE 10 | } 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson40_queue2/model/Task.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson40_queue2.model; 2 | 3 | public class Task { 4 | private final String name; 5 | 6 | public Task(String name) { 7 | this.name = name; 8 | } 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_getClass.model; 2 | 3 | public class Cat extends Animal { 4 | public Cat() { 5 | super("meow"); 6 | } 7 | 8 | public void meow() { 9 | sound(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_getClass.model; 2 | 3 | public class Dog extends Animal { 4 | public Dog() { 5 | super("woof"); 6 | } 7 | 8 | public void woof() { 9 | sound(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_getClass.model; 2 | 3 | public class Cow extends Animal { 4 | 5 | public Cow() { 6 | super("moo"); 7 | } 8 | 9 | public void moo() { 10 | sound(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; 2 | 3 | public class Cat extends Animal { 4 | public Cat() { 5 | super("meow"); 6 | } 7 | 8 | public void meow() { 9 | sound(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; 2 | 3 | public class Cow extends Animal { 4 | 5 | public Cow() { 6 | super("moo"); 7 | } 8 | 9 | public void moo() { 10 | sound(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; 2 | 3 | public class Dog extends Animal { 4 | public Dog() { 5 | super("woof"); 6 | } 7 | 8 | public void woof() { 9 | sound(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model1/C.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.model1; 2 | 3 | import com.walking.lesson171_annotations.task3.annotation.Component; 4 | 5 | @Component 6 | public class C { 7 | private final B b; 8 | 9 | public C(B b) { 10 | this.b = b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/domain/MainMenuItem.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.domain; 2 | 3 | public enum MainMenuItem { 4 | SEARCH_BY_NUMBER, 5 | SEARCH_BY_NUMBER_SUBSTRING, 6 | SEARCH_BY_COLOR, 7 | SEARCH_BY_YEAR_BETWEEN, 8 | EXIT, 9 | INCORRECT_CHOICE 10 | } 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson43_map/task1/exception/RegexValidationException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson43_map.task1.exception; 2 | 3 | public class RegexValidationException extends RuntimeException { 4 | public RegexValidationException(String str, String regex) { 5 | super("%s not matches to '%s'".formatted(str, regex)); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /resources/files/lesson32/task2/carCatalog.txt: -------------------------------------------------------------------------------- 1 | RR-111-RR;2015;yellow;true 2 | RR-222-RR;2016;null;true 3 | RR-333-RR;2017;yellow;true 4 | RR-444-RR;2018;yellow;true 5 | RR-555-RR;2018;yellow;true 6 | RR-666-RR;2018;yellow;true 7 | RR-777-RR;2018;yellow;true 8 | RR-888-RR;2018;yellow;true 9 | RR-999-RR;2018;yellow;true 10 | RR-000-RR;2018;yellow;true -------------------------------------------------------------------------------- /resources/files/lesson33/task2/carCatalog.txt: -------------------------------------------------------------------------------- 1 | RR-111-RR;2015;yellow;true 2 | RR-222-RR;2016;null;true 3 | RR-333-RR;2017;yellow;true 4 | RR-444-RR;2018;yellow;true 5 | RR-555-RR;2018;yellow;true 6 | RR-666-RR;2018;yellow;true 7 | RR-777-RR;2018;yellow;true 8 | RR-888-RR;2018;yellow;true 9 | RR-999-RR;2018;yellow;true 10 | RR-000-RR;2018;yellow;true -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task2/exception/RegexValidationException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task2.exception; 2 | 3 | public class RegexValidationException extends RuntimeException { 4 | public RegexValidationException(String str, String regex) { 5 | super("%s not matches to '%s'".formatted(str, regex)); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task3/exception/RegexValidationException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task3.exception; 2 | 3 | public class RegexValidationException extends RuntimeException { 4 | public RegexValidationException(String str, String regex) { 5 | super("%s not matches to '%s'".formatted(str, regex)); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/exception/RegexValidationException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.exception; 2 | 3 | public class RegexValidationException extends RuntimeException { 4 | public RegexValidationException(String str, String regex) { 5 | super("%s not matches to '%s'".formatted(str, regex)); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/com/walking/lesson29_generics2/task1/model/Generic.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson29_generics2.task1.model; 2 | 3 | public class Generic { 4 | private final T object; 5 | 6 | public Generic(T object) { 7 | this.object = object; 8 | } 9 | 10 | public T getObject() { 11 | return object; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/StatisticTask.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | 5 | import java.util.List; 6 | 7 | public interface StatisticTask { 8 | R calculate(List departments); 9 | } 10 | -------------------------------------------------------------------------------- /resources/files/lesson32/task1/carCatalog.txt: -------------------------------------------------------------------------------- 1 | RR-111-RR;2015;yellow;true 2 | RR-222-RR;2016;null;true 3 | RR-333-RR;2017;yellow;true 4 | RR-444-RR;2018;yellow;true 5 | RR-555-RR;2018;yellow;true 6 | RR-666-RR;2018;yellow;true 7 | RR-777-RR;2018;yellow;true 8 | RR-888-RR;2018;yellow;true 9 | RR-999-RR;2018;yellow;true 10 | RR-000-RR;2018;yellow;true 11 | -------------------------------------------------------------------------------- /resources/files/lesson32/task3/carCatalog.txt: -------------------------------------------------------------------------------- 1 | RR-111-RR;2015;yellow;true 2 | RR-222-RR;2016;null;true 3 | RR-333-RR;2017;yellow;true 4 | RR-444-RR;2018;yellow;true 5 | RR-555-RR;2018;yellow;true 6 | RR-666-RR;2018;yellow;true 7 | RR-777-RR;2018;yellow;true 8 | RR-888-RR;2018;yellow;true 9 | RR-999-RR;2018;yellow;true 10 | RR-000-RR;2018;yellow;true 11 | -------------------------------------------------------------------------------- /resources/files/lesson33/task1/carCatalog.txt: -------------------------------------------------------------------------------- 1 | RR-111-RR;2015;yellow;true 2 | RR-222-RR;2016;null;true 3 | RR-333-RR;2017;yellow;true 4 | RR-444-RR;2018;yellow;true 5 | RR-555-RR;2018;yellow;true 6 | RR-666-RR;2018;yellow;true 7 | RR-777-RR;2018;yellow;true 8 | RR-888-RR;2018;yellow;true 9 | RR-999-RR;2018;yellow;true 10 | RR-000-RR;2018;yellow;true 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task1_catchException/model/MediaType.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task1_catchException.model; 2 | 3 | public enum MediaType { 4 | TEXT, 5 | IMAGE, 6 | AUDIO, 7 | // Обратите внимание. Если енам не содержит полей и методов - ";" после последнего элемента не обязательна 8 | VIDEO 9 | } 10 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task1_throwsException/model/MediaType.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task1_throwsException.model; 2 | 3 | public enum MediaType { 4 | TEXT, 5 | IMAGE, 6 | AUDIO, 7 | // Обратите внимание. Если енам не содержит полей и методов - ";" после последнего элемента не обязательна 8 | VIDEO 9 | } 10 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task3/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task3.model; 2 | 3 | public class Animal { 4 | private final String sound; 5 | 6 | protected Animal(String sound) { 7 | this.sound = sound; 8 | } 9 | 10 | protected void sound() { 11 | System.out.println(sound); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task2/model/Cow.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task2.model; 2 | 3 | public class Cow extends Animal { 4 | public static final String COW_CLASS_NAME = "Cow"; 5 | 6 | public Cow() { 7 | super(COW_CLASS_NAME, "moo"); 8 | } 9 | 10 | public void moo() { 11 | sound(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task2/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task2.model; 2 | 3 | public class Dog extends Animal { 4 | public static final String DOG_CLASS_NAME = "Dog"; 5 | 6 | public Dog() { 7 | super(DOG_CLASS_NAME, "woof"); 8 | } 9 | 10 | public void woof() { 11 | sound(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task1/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task1.model; 2 | 3 | public class Cat extends Animal { 4 | private Cat() { 5 | System.out.println("I’m a cat"); 6 | } 7 | 8 | public Cat(String color) { 9 | this(); 10 | 11 | System.out.printf("I’m a %s cat\n", color); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task1/model/Dog.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task1.model; 2 | 3 | public class Dog extends Animal { 4 | private Dog() { 5 | System.out.println("I’m a dog"); 6 | } 7 | 8 | public Dog(String color) { 9 | this(); 10 | 11 | System.out.printf("I’m a %s dog\n", color); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task2/model/Habitation.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task2.model; 2 | 3 | public class Habitation { 4 | private final String address; 5 | 6 | public Habitation(String address) { 7 | this.address = address; 8 | } 9 | 10 | public String getAddress() { 11 | return address; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task1/model/Task.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task1.model; 2 | 3 | public class Task { 4 | private final String name; 5 | 6 | public Task(String name) { 7 | this.name = name; 8 | } 9 | 10 | public String getName() { 11 | return name; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /resources/sql/lesson_89_aggregation_group_by/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 2 | -- Верните в одном запросе: 3 | -- количество совершеннолетних пассажиров, 4 | -- наибольшее и наименьшее значение последней покупки. 5 | -- Сделайте группировку по полу 6 | select count(*), max(last_purchase), min(last_purchase), male 7 | from passenger 8 | where birth_date <= now() - make_interval(18) 9 | group by male; -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task2/answer/impl/HiAnswer.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task2.answer.impl; 2 | 3 | import com.walking.lesson16_abstract_class_interface.task2.answer.Answer; 4 | 5 | public class HiAnswer implements Answer { 6 | @Override 7 | public String getAnswer() { 8 | return "Hello"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_getClass/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_getClass.model; 2 | 3 | public class Animal { 4 | private final String sound; 5 | 6 | protected Animal(String sound) { 7 | this.sound = sound; 8 | } 9 | 10 | protected void sound() { 11 | System.out.println(sound); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson18_instanceof_getClass/task1_instanceof/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson18_instanceof_getClass.task1_instanceof.model; 2 | 3 | public class Animal { 4 | private final String sound; 5 | 6 | protected Animal(String sound) { 7 | this.sound = sound; 8 | } 9 | 10 | protected void sound() { 11 | System.out.println(sound); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task2/answer/impl/UnknownAnswer.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task2.answer.impl; 2 | 3 | import com.walking.lesson16_abstract_class_interface.task2.answer.Answer; 4 | 5 | public class UnknownAnswer implements Answer { 6 | @Override 7 | public String getAnswer() { 8 | return "Unknown message"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task2/answer/impl/HowAreYouAnswer.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task2.answer.impl; 2 | 3 | import com.walking.lesson16_abstract_class_interface.task2.answer.Answer; 4 | 5 | public class HowAreYouAnswer implements Answer { 6 | @Override 7 | public String getAnswer() { 8 | return "How are your doing"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task2/annotation/Id.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task2.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.FIELD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Id { 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/annotation/Component.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Component { 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/service/InputService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.service; 2 | 3 | import java.util.Scanner; 4 | 5 | public class InputService { 6 | private final Scanner scanner = new Scanner(System.in); 7 | 8 | public String getLine() { 9 | return scanner.nextLine(); 10 | } 11 | 12 | public void destroy() { 13 | scanner.close(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task2/exception/InputValidationException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task2.exception; 2 | 3 | //Делаем исключение unchecked, поскольку его возникновение - 4 | //исключительно ошибка поведения по вине пользователя 5 | public class InputValidationException extends RuntimeException { 6 | public InputValidationException(String message) { 7 | super(message); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/service/InputService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.service; 2 | 3 | import java.util.Scanner; 4 | 5 | public class InputService { 6 | private final Scanner scanner = new Scanner(System.in); 7 | 8 | public String getLine() { 9 | return scanner.nextLine(); 10 | } 11 | 12 | public void destroy() { 13 | scanner.close(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task2/model/NotNullObject.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task2.model; 2 | 3 | public class NotNullObject { 4 | private final T object; 5 | 6 | public NotNullObject(T object) { 7 | this.object = object; 8 | } 9 | 10 | public boolean isNull() { 11 | return object == null; 12 | } 13 | 14 | public T getObject() { 15 | return object; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model3/G.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.model3; 2 | 3 | 4 | import com.walking.lesson171_annotations.task3.annotation.Component; 5 | import com.walking.lesson171_annotations.task3.model1.A; 6 | 7 | 8 | @Component 9 | public class G { 10 | private final A a; 11 | private final F f; 12 | 13 | public G(A a, F f) { 14 | this.a = a; 15 | this.f = f; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /resources/sql/lesson_88_sorting_pagination/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Получите записи по всем совершеннолетним пассажирам. Отсортируйте их по имени. 3 | select * from passenger 4 | where birth_date <= now() - make_interval(18) 5 | order by first_name; 6 | 7 | -- Задача 2 8 | -- Получите только вторую и третью записи из предыдущего запроса. 9 | select * from passenger 10 | where birth_date <= now() - make_interval(18) 11 | order by first_name, id 12 | offset 1 limit 2; -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task2String.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * Используя Переменную типа String вывести свое имя в консоль. 5 | */ 6 | public class Task2String { 7 | public static void main(String[] args) { 8 | // Объявляем переменную типа String и инициализируем ее своим именем. 9 | String s = "Егор"; 10 | // Выводим в консоль значение переменной s 11 | System.out.print(s); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /resources/sql/lesson_90_having/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 2 | -- Получите число пассажиров по длине имени. 3 | -- Нас интересуют только короткие имена (меньше 6 символов). 4 | -- Если пассажиров с заданной длиной имени меньше, чем два – 5 | -- игнорируйте их в результирующей выборке. 6 | -- Отсортируйте данные по количеству пассажиров. 7 | select count(*), length(first_name) from passenger where length(first_name) < 6 8 | group by length(first_name) 9 | having count(*) > 2 10 | order by count(*); -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task3/exception/ArrayValidationException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task3.exception; 2 | 3 | public class ArrayValidationException extends RuntimeException { 4 | public ArrayValidationException(int elementNumber) { 5 | // Сообщение, по сути, константно, нет смысла передавать его каждый раз. 6 | // Зато есть смысл передать номер элемента 7 | super("Null element in array. Element's number: " + elementNumber); 8 | } 9 | } -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task2/annotation/Table.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task2.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Table { 11 | String name() default ""; 12 | 13 | String schema() default ""; 14 | } 15 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task1; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Создайте произвольный список элементов. 7 | * Выведите каждый из элементов в консоль. 8 | * Параметр forEach() опишите как method reference. 9 | */ 10 | public class Main { 11 | public static void main(String[] args) { 12 | List.of(1, 2, 3, 4, 5, 10) 13 | .forEach(System.out::println); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task2/annotation/Column.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task2.annotation; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.FIELD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Column { 11 | String name() default ""; 12 | 13 | boolean nullable() default true; 14 | } 15 | -------------------------------------------------------------------------------- /src/com/walking/lesson31_io_streams/exception/CastingException.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson31_io_streams.exception; 2 | 3 | public class CastingException extends RuntimeException { 4 | // Вместо Class clazz можно использовать строковый параметр, принимающий название типа. 5 | // Class<> использован в ознакомительных целях 6 | public CastingException(String value, Class clazz) { 7 | super("%s cannot be casted to %s".formatted(value, clazz.getSimpleName())); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model2/D.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.model2; 2 | 3 | import com.walking.lesson171_annotations.task3.annotation.Component; 4 | import com.walking.lesson171_annotations.task3.model1.A; 5 | import com.walking.lesson171_annotations.task3.model1.C; 6 | 7 | @Component 8 | public class D { 9 | private final A a; 10 | private final C c; 11 | 12 | public D(A a, C c) { 13 | this.a = a; 14 | this.c = c; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/com/walking/lesson39_queue1/task2/collection/Stack.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson39_queue1.task2.collection; 2 | 3 | import com.walking.lesson39_queue1.collection.SinglyLinkedList; 4 | 5 | public class Stack { 6 | private final SinglyLinkedList list = new SinglyLinkedList<>(); 7 | 8 | public void push(E e) { 9 | list.add(e); 10 | } 11 | 12 | public E pop() { 13 | E result = list.getTop(); 14 | list.remove(result); 15 | 16 | return result; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/domain/filter/ColorCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.domain.filter; 2 | 3 | import com.walking.lesson46_lambda.task3.model.Car; 4 | 5 | public class ColorCarFilter implements CarFilter { 6 | private final String color; 7 | 8 | public ColorCarFilter(String color) { 9 | this.color = color; 10 | } 11 | 12 | @Override 13 | public boolean filter(Car car) { 14 | return color.equalsIgnoreCase(car.getColor()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/com/walking/lesson39_queue1/task4/collection/Queue.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson39_queue1.task4.collection; 2 | 3 | import com.walking.lesson39_queue1.collection.DoublyLinkedList; 4 | 5 | public class Queue { 6 | private final DoublyLinkedList list = new DoublyLinkedList<>(); 7 | 8 | public void push(E e) { 9 | list.addLast(e); 10 | } 11 | 12 | public E pop() { 13 | E result = list.getTop(); 14 | list.removeTop(); 15 | 16 | return result; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task2/model/Cat.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task2.model; 2 | 3 | public class Cat extends Animal { 4 | public static final String CAT_CLASS_NAME = "Cat"; 5 | 6 | // Передаем параметры в super внутри конструктора, а не принимая их в параметры Cat(), 7 | // чтобы избежать ошибочного поведения при использовании этого класса 8 | public Cat() { 9 | super(CAT_CLASS_NAME, "meow"); 10 | } 11 | 12 | public void meow() { 13 | sound(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/domain/filter/ColorCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.domain.filter; 2 | 3 | import com.walking.lesson47_method_reference.task3.model.Car; 4 | 5 | public class ColorCarFilter implements CarFilter { 6 | private final String color; 7 | 8 | public ColorCarFilter(String color) { 9 | this.color = color; 10 | } 11 | 12 | @Override 13 | public boolean filter(Car car) { 14 | return color.equalsIgnoreCase(car.getColor()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/com/walking/lesson65_atomics/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson65_atomics.task1; 2 | 3 | /** 4 | * Реализуйте сервис управления счетчиками. 5 | * Счетчики могут добавляться и удаляться, 6 | * в самих счетчиках могут изменяться значения – как увеличиваться, 7 | * так и уменьшаться. Также возможен сброс счетчика до 0 (нуля). 8 | *

9 | * Гарантируйте возможность безопасной работы с данным сервисом. 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | // Место для ваших тестов 14 | } 15 | } -------------------------------------------------------------------------------- /resources/sql/lesson_85_select/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Получите список имен, фамилий и дат рождений всех пассажиров. 3 | select first_name, last_name, birth_date from passenger; 4 | 5 | -- Задача 2 6 | -- Получите список любимых аэропортов по каждому пассажиру. 7 | select id, favorite_airports from passenger; 8 | 9 | -- Задача 3 10 | -- Получите первый из любимых аэропортов по каждому пассажиру. 11 | -- Массивы в SQL нумеруются с 1. 12 | -- Синтаксис для получения элементов массива не отличается от Java 13 | select id, favorite_airports[1] from passenger; -------------------------------------------------------------------------------- /src/com/walking/lesson5_arrays/Task1WithoutString.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson5_arrays; 2 | 3 | /** 4 | * Создать массив char, заполненный буквами своего имени в верном порядке. 5 | * Используя этот массив, вывести свое имя в консоль. 6 | * Не использовать переменную типа String. 7 | */ 8 | public class Task1WithoutString { 9 | public static void main(String[] args) { 10 | char[] nameArray = new char[]{'Е', 'г', 'о', 'р'}; 11 | 12 | for (char ch : nameArray) { 13 | System.out.print(ch); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task2; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Реализуйте Задачу 1, обернув метод выведения записи в консоль 7 | * (System.out.println()) в собственный статический метод. 8 | */ 9 | public class Main { 10 | public static void main(String[] args) { 11 | List.of(1, 2, 3, 4, 5, 10) 12 | .forEach(Main::print); 13 | } 14 | 15 | private static void print(Object o) { 16 | System.out.println(o); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model2/E.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.model2; 2 | 3 | 4 | import com.walking.lesson171_annotations.task3.annotation.Component; 5 | import com.walking.lesson171_annotations.task3.model1.A; 6 | import com.walking.lesson171_annotations.task3.model1.B; 7 | 8 | @Component 9 | public class E { 10 | private final A a; 11 | private final B b; 12 | private final D d; 13 | 14 | public E(A a, B b, D d) { 15 | this.a = a; 16 | this.b = b; 17 | this.d = d; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task3/model3/F.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task3.model3; 2 | 3 | 4 | import com.walking.lesson171_annotations.task3.annotation.Component; 5 | import com.walking.lesson171_annotations.task3.model1.A; 6 | import com.walking.lesson171_annotations.task3.model1.B; 7 | 8 | @Component 9 | public class F { 10 | private final A a; 11 | private final B b; 12 | private final G g; 13 | 14 | public F(A a, B b, G g) { 15 | this.a = a; 16 | this.b = b; 17 | this.g = g; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/domain/filter/NumberCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.domain.filter; 2 | 3 | import com.walking.lesson46_lambda.task3.model.Car; 4 | 5 | public class NumberCarFilter implements CarFilter { 6 | private final String number; 7 | 8 | public NumberCarFilter(String number) { 9 | this.number = number; 10 | } 11 | 12 | @Override 13 | public boolean filter(Car car) { 14 | String carNumber = car.getIdentifier().getNumber(); 15 | 16 | return number.equals(carNumber); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task3/service/TaskService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task3.service; 2 | 3 | import com.walking.lesson72_blocking_non_blocking_queue.task3.model.Task; 4 | 5 | public class TaskService { 6 | private final TaskThreadPool threadPool = new TaskThreadPool(); 7 | 8 | public Task add(Task task) throws InterruptedException { 9 | threadPool.execute(task); 10 | System.out.printf("Task with number '%s' was added!\n", task.getNumber()); 11 | 12 | return task; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /resources/sql/lesson_94_distinct/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Верните данные обо всех уникальных датах рождения среди пассажиров мужского пола. 3 | select distinct birth_date from passenger where male; 4 | 5 | -- Задача 2 6 | -- Верните информацию по самому молодому носителю каждой фамилии. 7 | select distinct on(last_name) * from passenger order by last_name, birth_date; 8 | 9 | -- Задача 3 10 | -- Верните список уникальных имен. Если имя носит и мужчина, и женщина - оно должно быть указано дважды. 11 | select distinct on(first_name, male) first_name from passenger order by first_name, male; -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/joiner/ParagraphJoiner.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.joiner; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public class ParagraphJoiner extends AbstractJoiner { 6 | @Override 7 | public String join(TextElement[] elements) { 8 | StringBuilder paragraph = new StringBuilder(); 9 | 10 | for (TextElement element : elements) { 11 | paragraph.append(element.getJoinedElement()); 12 | } 13 | 14 | return paragraph.toString() 15 | .trim(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task3/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task3.model; 2 | 3 | //Животное реализуем как абстрактный класс. Это избавит от необходимости обрабатывать создание объекта 4 | //типа Animal, которое не укладывается в корректное поведение 5 | public abstract class Animal { 6 | // Нам нет необходимости указывать конструктор как protected, 7 | // им и так смогут воспользоваться лишь наследники. В остальном это конструктор по умолчанию, 8 | // Java создаст его сама 9 | 10 | public abstract void sound(); 11 | } 12 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task2/service/MessageSendingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task2.service; 2 | 3 | import java.util.concurrent.BlockingQueue; 4 | 5 | public class MessageSendingService { 6 | private final BlockingQueue messageHolder; 7 | 8 | public MessageSendingService(BlockingQueue messageHolder) { 9 | this.messageHolder = messageHolder; 10 | } 11 | 12 | public void send(String message) throws InterruptedException { 13 | messageHolder.put(message); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task1/inner_class/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task1.inner_class; 2 | 3 | public interface EquilateralShape { 4 | // Поля интерфейса - всегда public static final 5 | String EMPTY_ELEMENT = " "; 6 | String EMPTY_STRING = ""; 7 | char NEW_LINE_SYMBOL = '\n'; 8 | 9 | // Мы не можем определить поле length в интерфейсе, но можем указать, что каждый наследник обязан 10 | // определить поведение метода по получению значения length 11 | int getLength(); 12 | 13 | String createShapeString(); 14 | } 15 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task1/static_class/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task1.static_class; 2 | 3 | public interface EquilateralShape { 4 | // Поля интерфейса - всегда public static final 5 | String EMPTY_ELEMENT = " "; 6 | String EMPTY_STRING = ""; 7 | char NEW_LINE_SYMBOL = '\n'; 8 | 9 | // Мы не можем определить поле length в интерфейсе, но можем указать, что каждый наследник обязан 10 | // определить поведение метода по получению значения length 11 | int getLength(); 12 | 13 | String createShapeString(); 14 | } 15 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task1/anonymous_class/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task1.anonymous_class; 2 | 3 | public interface EquilateralShape { 4 | // Поля интерфейса - всегда public static final 5 | String EMPTY_ELEMENT = " "; 6 | String EMPTY_STRING = ""; 7 | char NEW_LINE_SYMBOL = '\n'; 8 | 9 | // Мы не можем определить поле length в интерфейсе, но можем указать, что каждый наследник обязан 10 | // определить поведение метода по получению значения length 11 | int getLength(); 12 | 13 | String createShapeString(); 14 | } 15 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/domain/filter/NumberCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.domain.filter; 2 | 3 | import com.walking.lesson47_method_reference.task3.model.Car; 4 | 5 | public class NumberCarFilter implements CarFilter { 6 | private final String number; 7 | 8 | public NumberCarFilter(String number) { 9 | this.number = number; 10 | } 11 | 12 | @Override 13 | public boolean filter(Car car) { 14 | String carNumber = car.getIdentifier().getNumber(); 15 | 16 | return number.equals(carNumber); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task4/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task4; 2 | 3 | /** 4 | * Решите Задачу 3, не используя Thread.join(). 5 | */ 6 | public class Main { 7 | public static void main(String[] args) throws InterruptedException { 8 | var callableThread = new CallableThread<>(() -> Thread.currentThread().getName()); 9 | callableThread.start(); 10 | System.out.println(callableThread.getResult()); 11 | 12 | callableThread = new CallableThread<>(() -> Thread.currentThread().getName()); 13 | System.out.println(callableThread.startAndGet()); 14 | } 15 | } -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task2/model/ProductBuyer.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task2.model; 2 | 3 | public class ProductBuyer { 4 | private final String name; 5 | 6 | private long productAmount; 7 | 8 | public ProductBuyer(String name) { 9 | this.name = name; 10 | } 11 | 12 | public long getProductAmount() { 13 | return productAmount; 14 | } 15 | 16 | public void setProductAmount(long productAmount) { 17 | this.productAmount = productAmount; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task2/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task2.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson73_barrier/task1/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson73_barrier.task1.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /resources/sql/lesson_86_where/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Получите запись с id равным 1. 3 | select * from passenger where id = 1; 4 | 5 | -- Задача 2 6 | -- Получите все записи, для которых нет любимых аэропортов. 7 | select * from passenger where favorite_airports is null or cardinality(favorite_airports) = 0; 8 | 9 | -- Задача 3 10 | -- Получите все записи, где фамилия равна «Petrov» и имя равно «Petr». 11 | -- Добавьте к выборке все записи, для которых дата рождения меньше, 12 | -- чем дата последней покупки билета. 13 | select * from passenger where (first_name = 'Petr' and last_name = 'Petrov') or birth_date < last_purchase; -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task1_interface/model/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task1_interface.model; 2 | 3 | public interface EquilateralShape { 4 | // Поля интерфейса - всегда public static final 5 | String EMPTY_ELEMENT = " "; 6 | String EMPTY_STRING = ""; 7 | char NEW_LINE_SYMBOL = '\n'; 8 | 9 | // Мы не можем определить поле length в интерфейсе, но можем указать, что каждый наследник обязан 10 | // определить поведение метода по получению значения length 11 | int getLength(); 12 | 13 | String createShapeString(); 14 | } 15 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/joiner/SentenceJoiner.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.joiner; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public class SentenceJoiner extends AbstractJoiner { 6 | @Override 7 | public String join(TextElement[] elements) { 8 | StringBuilder sentence = new StringBuilder(); 9 | 10 | for (TextElement element : elements) { 11 | sentence.append(" ") 12 | .append(element.getElement()); 13 | } 14 | 15 | return sentence.append(".") 16 | .toString(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task2/model/ProductSupplier.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task2.model; 2 | 3 | public class ProductSupplier { 4 | private final String name; 5 | 6 | private long productAmount; 7 | 8 | public ProductSupplier(String name) { 9 | this.name = name; 10 | } 11 | 12 | public long getProductAmount() { 13 | return productAmount; 14 | } 15 | 16 | public void setProductAmount(long productAmount) { 17 | this.productAmount = productAmount; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task2/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task2.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson75_thread_pool/task3/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson75_thread_pool.task3.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task7.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | 5 | import java.util.List; 6 | import java.util.stream.Collectors; 7 | 8 | /** 9 | * Предоставьте общее число открытых вакансий в компании. 10 | */ 11 | public class Task7 implements StatisticTask { 12 | @Override 13 | public Integer calculate(List departments) { 14 | return departments.stream() 15 | .collect(Collectors.summingInt(Department::getVacancyAmount)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/com/walking/lesson5_arrays/Task1WithString.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson5_arrays; 2 | 3 | /** 4 | * Создать массив char, заполненный буквами своего имени в верном порядке. 5 | * Используя этот массив, вывести свое имя в консоль. 6 | * Предварительно собрать значения массива в переменную типа String. 7 | */ 8 | public class Task1WithString { 9 | public static void main(String[] args) { 10 | char[] nameArray = new char[]{'Е', 'г', 'о', 'р'}; 11 | String name = ""; 12 | 13 | for (char ch : nameArray) { 14 | name += ch; 15 | } 16 | 17 | System.out.print(name); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task2_1/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task2_1.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task2_2/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task2_2.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task2_3/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task2_3.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/joiner/TextJoiner.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.joiner; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public class TextJoiner extends AbstractJoiner { 6 | @Override 7 | public String join(TextElement[] elements) { 8 | StringBuilder text = new StringBuilder(); 9 | 10 | for (TextElement element : elements) { 11 | if (!text.isEmpty()) { 12 | text.append("\n"); 13 | } 14 | 15 | text.append(element.getJoinedElement()); 16 | } 17 | 18 | return text.toString(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson14_polymorphism/task1/model/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson14_polymorphism.task1.model; 2 | 3 | public class EquilateralShape { 4 | public static final String EMPTY_ELEMENT = " "; 5 | public static final String EMPTY_STRING = ""; 6 | public static final char NEW_LINE_SYMBOL = '\n'; 7 | 8 | protected final int length; 9 | 10 | protected EquilateralShape(int length) { 11 | this.length = length; 12 | } 13 | 14 | public int getLength() { 15 | return length; 16 | } 17 | 18 | public String createShapeString() { 19 | return "Unknown shape"; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/domain/filter/NumberSubstringCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.domain.filter; 2 | 3 | import com.walking.lesson46_lambda.task3.model.Car; 4 | 5 | public class NumberSubstringCarFilter implements CarFilter { 6 | private final String numberSubstring; 7 | 8 | public NumberSubstringCarFilter(String numberSubstring) { 9 | this.numberSubstring = numberSubstring; 10 | } 11 | 12 | @Override 13 | public boolean filter(Car car) { 14 | String carNumber = car.getIdentifier().getNumber(); 15 | 16 | return carNumber.contains(numberSubstring); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson4_cycles/Task5Var1.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson4_cycles; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Выводить на экран "Не угадал!" до тех пор, 7 | * пока с клавиатуры не будет введено число 1. 8 | * Запрашивать число с клавиатуры перед выводом на экран "Не угадал!" 9 | */ 10 | public class Task5Var1 { 11 | public static void main(String[] args) { 12 | Scanner scanner = new Scanner(System.in); 13 | 14 | while (scanner.nextInt() != 1) {//Перед каждым выводом фразы будет запрашиваться число 15 | System.out.println("Не угадал!"); 16 | } 17 | 18 | scanner.close(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task3/service/IntRandomGenerator.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task3.service; 2 | 3 | import java.util.Random; 4 | 5 | public class IntRandomGenerator { 6 | private final int minValue; 7 | private final int maxValue; 8 | 9 | private final Random random; 10 | 11 | public IntRandomGenerator(int minValue, int maxValue) { 12 | this.minValue = minValue; 13 | this.maxValue = maxValue; 14 | 15 | this.random = new Random(); 16 | } 17 | 18 | public int generate() { 19 | return random.nextInt(minValue, maxValue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task1/model/NumberExponentiater.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task1.model; 2 | 3 | public class NumberExponentiater { 4 | private final T number; 5 | 6 | public NumberExponentiater(T number) { 7 | this.number = number; 8 | } 9 | 10 | // Обратите внимание. В конструктор может быть передан null, соответственно, 11 | // метод может выбросить NullPointerException 12 | public double exponentiate(double exponent) { 13 | return Math.pow(number.doubleValue(), exponent); 14 | } 15 | 16 | public T getNumber() { 17 | return number; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/walking/lesson29_generics2/task2/model/NumberExponentiater.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson29_generics2.task2.model; 2 | 3 | public class NumberExponentiater { 4 | private final T number; 5 | 6 | public NumberExponentiater(T number) { 7 | this.number = number; 8 | } 9 | 10 | // Обратите внимание. В конструктор может быть передан null, соответственно, 11 | // метод может выбросить NullPointerException 12 | public double exponentiate(double exponent) { 13 | return Math.pow(number.doubleValue(), exponent); 14 | } 15 | 16 | public T getNumber() { 17 | return number; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task8.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | 5 | import java.util.List; 6 | import java.util.stream.Collectors; 7 | 8 | /** 9 | * Перечислите названия всех департаментов компании через запятую. 10 | */ 11 | public class Task8 implements StatisticTask { 12 | @Override 13 | public String calculate(List departments) { 14 | return departments.stream() 15 | .map(Department::getName) 16 | .collect(Collectors.joining(", ")); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson43_map/task2/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson43_map.task2.service; 2 | 3 | import com.walking.lesson43_map.task2.model.Car; 4 | import com.walking.lesson43_map.task2.model.CarIdentifier; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | public class CarService { 10 | private final Map cars = new HashMap<>(); 11 | 12 | public CarService(Car[] cars) { 13 | for (Car car : cars) { 14 | this.cars.put(car.getIdentifier(), car); 15 | } 16 | } 17 | 18 | public Car findCar(CarIdentifier identifier) { 19 | return cars.get(identifier); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task2; 2 | 3 | import com.walking.lesson28_generics1.task2.model.NotNullObject; 4 | 5 | /** 6 | * Создать класс-обертку над объектом любого типа. 7 | * Предусмотреть boolean-метод, проверяющий значение объекта на null. 8 | */ 9 | public class Main { 10 | public static void main(String[] args) { 11 | NotNullObject notNullObject = new NotNullObject<>(new Object()); 12 | System.out.println(notNullObject.isNull()); 13 | 14 | NotNullObject nullObject = new NotNullObject<>(null); 15 | System.out.println(nullObject.isNull()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/domain/filter/NumberSubstringCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.domain.filter; 2 | 3 | import com.walking.lesson47_method_reference.task3.model.Car; 4 | 5 | public class NumberSubstringCarFilter implements CarFilter { 6 | private final String numberSubstring; 7 | 8 | public NumberSubstringCarFilter(String numberSubstring) { 9 | this.numberSubstring = numberSubstring; 10 | } 11 | 12 | @Override 13 | public boolean filter(Car car) { 14 | String carNumber = car.getIdentifier().getNumber(); 15 | 16 | return carNumber.contains(numberSubstring); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson75_thread_pool/task3/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson75_thread_pool.task3; 2 | 3 | import com.walking.lesson75_thread_pool.task3.service.IntRandomGenerator; 4 | import com.walking.lesson75_thread_pool.task3.service.ThreadByChunkArrayFillingService; 5 | 6 | /** 7 | * Реализуйте третий вариант Задачи 2 урока 60 с использованием пулов потоков. 8 | * 9 | * @see com.walking.lesson60_thread.task2.Main 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | var randomGenerator = new IntRandomGenerator(1, 10); 14 | 15 | new ThreadByChunkArrayFillingService(randomGenerator).fill(new int[10][10000000]); 16 | } 17 | } -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/domain/filter/DateBetweenCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.domain.filter; 2 | 3 | import com.walking.lesson46_lambda.task3.model.Car; 4 | 5 | public class DateBetweenCarFilter implements CarFilter { 6 | private final int yearFrom; 7 | private final int yearTo; 8 | 9 | public DateBetweenCarFilter(int yearFrom, int yearTo) { 10 | this.yearFrom = yearFrom; 11 | this.yearTo = yearTo; 12 | } 13 | 14 | @Override 15 | public boolean filter(Car car) { 16 | int carYear = car.getIdentifier().getYear(); 17 | 18 | return yearFrom <= carYear && carYear <= yearTo; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task3/model/Task.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task3.model; 2 | 3 | public class Task implements Runnable { 4 | private final Integer number; 5 | 6 | public Task(Integer number) { 7 | this.number = number; 8 | } 9 | 10 | @Override 11 | public void run() { 12 | System.out.println(number); 13 | 14 | try { 15 | Thread.sleep(number * 1000); 16 | } catch (InterruptedException e) { 17 | throw new RuntimeException(e); 18 | } 19 | } 20 | 21 | public Integer getNumber() { 22 | return number; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson17_enum/task2/animal/AnimalType.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson17_enum.task2.animal; 2 | 3 | public enum AnimalType { 4 | DOG("woof"), 5 | CAT("meow"), 6 | COW("moo"); 7 | 8 | private final String voice; 9 | 10 | AnimalType(String voice) { 11 | this.voice = voice; 12 | } 13 | 14 | public String getVoice() { 15 | return voice; 16 | } 17 | 18 | // Следуем изначальному условию задачи, где указано, что метод должен выводить "голос" в консоль. 19 | // Само собой, в общем случае это не корректно и стоило бы возвращать из метода строку 20 | public void sound() { 21 | System.out.println(voice); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task3/service/SearchService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task3.service; 2 | 3 | import com.walking.lesson28_generics1.task3.exception.ElementNotFoundException; 4 | 5 | import java.util.Objects; 6 | 7 | public class SearchService { 8 | private final T[] array; 9 | 10 | public SearchService(T[] array) { 11 | this.array = array; 12 | } 13 | 14 | public T find(T searchingValue) { 15 | for (T element : array) { 16 | if (Objects.equals(element, searchingValue)) { 17 | return element; 18 | } 19 | } 20 | 21 | throw new ElementNotFoundException(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson4_cycles/Task5Var2.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson4_cycles; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Выводить на экран "Не угадал!" до тех пор, 7 | * пока с клавиатуры не будет введено число 1. 8 | * Запрашивать число с клавиатуры после выводом на экран "Не угадал!" 9 | */ 10 | public class Task5Var2 { 11 | public static void main(String[] args) { 12 | Scanner scanner = new Scanner(System.in); 13 | 14 | // Сначала выведем фразу в первый раз, а лишь потом начнем запрашивать число 15 | do { 16 | System.out.println("Не угадал!"); 17 | } while (scanner.nextInt() != 1); 18 | 19 | scanner.close(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task2/service/MessageReceivingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task2.service; 2 | 3 | import java.util.concurrent.BlockingQueue; 4 | 5 | public class MessageReceivingService { 6 | private final BlockingQueue messageHolder; 7 | 8 | public MessageReceivingService(BlockingQueue messageHolder) { 9 | this.messageHolder = messageHolder; 10 | } 11 | 12 | public String receive() throws InterruptedException { 13 | String message = messageHolder.take(); 14 | System.out.printf("Received message: '%s'%n", message); 15 | 16 | return message; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/com/walking/lesson39_queue1/util/CollectionUtils.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson39_queue1.util; 2 | 3 | import java.util.Collection; 4 | import java.util.Iterator; 5 | 6 | public class CollectionUtils { 7 | // Не самый лучший, но пример использования статических методов в Java 8 | public static void dropEvenHashCodeElements(Collection collection) { 9 | Iterator iterator = collection.iterator(); 10 | // Пример обработки коллекции через итератор 11 | while (iterator.hasNext()) { 12 | E e = iterator.next(); 13 | 14 | if (e.hashCode() % 2 == 0) { 15 | collection.remove(e); 16 | } 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/domain/filter/DateBetweenCarFilter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.domain.filter; 2 | 3 | import com.walking.lesson47_method_reference.task3.model.Car; 4 | 5 | public class DateBetweenCarFilter implements CarFilter { 6 | private final int yearFrom; 7 | private final int yearTo; 8 | 9 | public DateBetweenCarFilter(int yearFrom, int yearTo) { 10 | this.yearFrom = yearFrom; 11 | this.yearTo = yearTo; 12 | } 13 | 14 | @Override 15 | public boolean filter(Car car) { 16 | int carYear = car.getIdentifier().getYear(); 17 | 18 | return yearFrom <= carYear && carYear <= yearTo; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/parser/TextParser.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.parser; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public class TextParser extends AbstractParser { 6 | @Override 7 | public TextElement parse(TextElement textElement) { 8 | String[] parsedStrings = textElement.getElement() 9 | .split("\n"); 10 | TextElement[] children = new TextElement[parsedStrings.length]; 11 | 12 | for (int i = 0; i < parsedStrings.length; i++) { 13 | children[i] = new TextElement(parsedStrings[i]); 14 | } 15 | 16 | textElement.setChildren(children); 17 | 18 | return textElement; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /resources/sql/lesson_97_join/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Посчитайте число билетов, сгруппировав их по фамилиям пассажиров. 3 | -- Отобразите только те группы, где число билетов больше 3. 4 | select count(*), p.last_name from passenger p 5 | join ticket t on t.passenger_id = p.id 6 | group by p.last_name 7 | having count(*) > 3; 8 | 9 | -- Задача 2 10 | -- Найдите наиболее популярный аэропорт прибытия для каждой из фамилий пассажиров. 11 | select distinct on (p.last_name) count(*) count, p.last_name, t.arrival_airport 12 | from passenger p 13 | join ticket t on t.passenger_id = p.id 14 | group by p.last_name, t.arrival_airport 15 | order by p.last_name, count desc; 16 | -- Не единственный возможный, но наиболее очевидный (имхо) на этом этапе вариант решения -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task2/answer/impl/ByeAnswer.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task2.answer.impl; 2 | 3 | import com.walking.lesson16_abstract_class_interface.task2.answer.Answer; 4 | 5 | //Обратите внимание на пакет, где находятся наследники. 6 | //Это не обязательная практика, но достаточно распространено вынесение реализаций интерфейса 7 | //в отдельный пакет с названием "impl" 8 | public class ByeAnswer implements Answer { 9 | @Override 10 | public String getAnswer() { 11 | // Опционально, строковый литерал можно вынести в отдельное поле или даже в константу, 12 | // в зависимости от логики, предполагаемой в дальнейшем. 13 | return "Good bye"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task2/service/SingleThreadArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task2.service; 2 | 3 | public class SingleThreadArrayFillingService implements ArrayFillingService { 4 | private final IntRandomGenerator randomGenerator; 5 | 6 | public SingleThreadArrayFillingService(IntRandomGenerator randomGenerator) { 7 | this.randomGenerator = randomGenerator; 8 | } 9 | 10 | @Override 11 | public int[][] fill(int[][] array) { 12 | for (int i = 0; i < array.length; i++) { 13 | for (int j = 0; j < array[i].length; j ++) { 14 | array[i][j] = randomGenerator.generate(); 15 | } 16 | } 17 | 18 | return array; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task1/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task1.service; 2 | 3 | import com.walking.lesson49_optional.task1.model.Car; 4 | import com.walking.lesson49_optional.task1.model.CarIdentifier; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | import java.util.Optional; 9 | 10 | public class CarService { 11 | private final Map cars = new HashMap<>(); 12 | 13 | public CarService(Car[] cars) { 14 | for (Car car : cars) { 15 | this.cars.put(car.getIdentifier(), car); 16 | } 17 | } 18 | 19 | public Optional findCar(CarIdentifier identifier) { 20 | return Optional.ofNullable(cars.get(identifier)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task2/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task2.service; 2 | 3 | import com.walking.lesson49_optional.task2.model.car.Car; 4 | import com.walking.lesson49_optional.task2.model.car.CarIdentifier; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | import java.util.Optional; 9 | 10 | public class CarService { 11 | private final Map cars = new HashMap<>(); 12 | 13 | public CarService(Car[] cars) { 14 | for (Car car : cars) { 15 | this.cars.put(car.getIdentifier(), car); 16 | } 17 | } 18 | 19 | public Optional findCar(CarIdentifier identifier) { 20 | return Optional.ofNullable(cars.get(identifier)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson39_queue1/task4/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson39_queue1.task4; 2 | 3 | import com.walking.lesson39_queue1.task4.collection.Queue; 4 | 5 | /** 6 | * Реализуйте одностороннюю очередь на базе двусвязного списка из Задачи 3. 7 | */ 8 | public class Main { 9 | public static void main(String[] args) { 10 | Queue stack = new Queue<>(); 11 | stack.push(1); 12 | stack.push(2); 13 | stack.push(3); 14 | 15 | System.out.println(stack.pop());//1 16 | System.out.println(stack.pop());//2 17 | 18 | stack.push(4); 19 | 20 | System.out.println(stack.pop());//3 21 | System.out.println(stack.pop());//4 22 | 23 | System.out.println(stack.pop());//NPE 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector; 2 | 3 | /** 4 | * Необходимо реализовать набор функций для HRM-системы компании, 5 | * каждая из которых сводится к формированию определенной статистики на базе информации 6 | * о всех департаментах компании и сотрудниках в них. 7 | * Реализация каждой задачи должна представлять собой отдельный метод (или класс), 8 | * единственным параметром которого является список всех департаментов в компании, 9 | * а возвращаемым значением – произвольный объект (чаще всего – какая-то коллекция), 10 | * хранящий информацию, которую требуется получить по условию задачи. 11 | */ 12 | public class Main { 13 | public static void main(String[] args) { 14 | } 15 | } -------------------------------------------------------------------------------- /src/com/walking/lesson28_generics1/task3/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson28_generics1.task3; 2 | 3 | import com.walking.lesson28_generics1.task3.service.SearchService; 4 | 5 | /** 6 | * Реализовать класс для работы с массивом. 7 | * Разработать метод, производящий поиск значения в массиве. 8 | * Если значение не найдено — выбрасывать исключение. 9 | * Если найдено — возвращать его. 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | Integer[] integers = new Integer[]{1, 2, 3, 4, 5, 6, 7}; 14 | SearchService integerSearchService = new SearchService<>(integers); 15 | 16 | int found = integerSearchService.find(1); 17 | System.out.println(found); 18 | 19 | integerSearchService.find(8); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson171_annotations/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson171_annotations.task1; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Реализуйте метод, который принимает на вход список объектов Class 7 | * и записывает в консоль имена помеченных аннотацией @Deprecated. 8 | */ 9 | public class Main { 10 | public static void main(String[] args) { 11 | printDeprecatedClassNames(List.of(DeprecatedTestClass.class, String.class, List.class)); 12 | } 13 | 14 | private static void printDeprecatedClassNames(List> classes) { 15 | classes.stream() 16 | .filter(clazz -> clazz.isAnnotationPresent(Deprecated.class)) 17 | .map(Class::getName) 18 | .forEach(System.out::println); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson17_enum/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson17_enum.task2; 2 | 3 | import com.walking.lesson17_enum.task2.animal.AnimalType; 4 | 5 | /** 6 | * Реализуйте задачу 7 | * ... 8 | * через enum. Пусть Cow, Dog и Cat будут значениями enum'а Animal. 9 | */ 10 | public class Main { 11 | public static void main(String[] args) { 12 | AnimalType[] animals = new AnimalType[]{AnimalType.DOG, AnimalType.CAT, AnimalType.COW, AnimalType.DOG}; 13 | 14 | soundAll(animals); 15 | } 16 | 17 | private static void soundAll(AnimalType[] animals) { 18 | for (AnimalType animal : animals) { 19 | animal.sound(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task2SingleChar.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * Используя одну переменную типа char вывести свое имя в консоль. 5 | */ 6 | public class Task2SingleChar { 7 | public static void main(String[] args) { 8 | // Объявляем переменную типа char и инициализируем ее первой буквой имени 9 | char ch = 'Е'; 10 | // Выводим значение переменной ch в консоль 11 | System.out.print(ch); 12 | 13 | // Присваиваем переменной ch следующую букву имени 14 | // Повторяем действия до тех пор, пока буквы в имени не кончатся 15 | ch = 'г'; 16 | System.out.print(ch); 17 | 18 | ch = 'о'; 19 | System.out.print(ch); 20 | 21 | ch = 'р'; 22 | System.out.print(ch); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task3/model/LockingCounter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task3.model; 2 | 3 | import java.util.concurrent.locks.Lock; 4 | import java.util.concurrent.locks.ReentrantLock; 5 | 6 | public class LockingCounter { 7 | private final Lock lock = new ReentrantLock(); 8 | private final int maxValue; 9 | 10 | private volatile int value; 11 | 12 | public LockingCounter(int maxValue) { 13 | this.maxValue = maxValue; 14 | } 15 | 16 | public Lock getLock() { 17 | return lock; 18 | } 19 | 20 | public int getValue() { 21 | return value; 22 | } 23 | 24 | public void setValue(int value) { 25 | this.value = value; 26 | } 27 | 28 | public int getMaxValue() { 29 | return maxValue; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson8_classes_objects/Counter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson8_classes_objects; 2 | 3 | public class Counter { 4 | public String name; 5 | public int counter; 6 | 7 | public Counter(String name) { 8 | this(name, 0); 9 | } 10 | 11 | public Counter(String name, int counter) { 12 | this.counter = counter; 13 | this.name = name; 14 | } 15 | 16 | public int increase(int value) { 17 | counter += value; 18 | 19 | return counter; 20 | } 21 | 22 | public int decrease(int value) { 23 | counter -= value; 24 | 25 | return counter; 26 | } 27 | 28 | public int increment() { 29 | return ++counter; 30 | } 31 | 32 | public int decrement() { 33 | return --counter; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/walking/lesson40_queue2/service/TaskService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson40_queue2.service; 2 | 3 | import com.walking.lesson40_queue2.model.Task; 4 | 5 | import java.util.ArrayDeque; 6 | import java.util.Queue; 7 | 8 | public class TaskService { 9 | private final Queue tasks = new ArrayDeque<>(); 10 | 11 | public Task add(Task task) { 12 | tasks.offer(task); 13 | System.out.printf("Task '%s' added!\n", task.getName()); 14 | 15 | return task; 16 | } 17 | 18 | public void complete() { 19 | Task task = tasks.poll(); 20 | 21 | if (task == null) { 22 | System.out.println("Tasks' queue is empty!"); 23 | } else { 24 | System.out.printf("Task '%s' completed!\n", task.getName()); 25 | } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task1.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * Предоставьте список всех сотрудников компании. 12 | */ 13 | public class Task1 implements StatisticTask> { 14 | @Override 15 | public List calculate(List departments) { 16 | return departments.stream() 17 | .map(Department::getEmployees) 18 | .flatMap(Collection::stream) 19 | .collect(Collectors.toList()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task4.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | 5 | import java.util.Comparator; 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * Предоставьте список всех департаментов в алфавитном порядке в виде LinkedList. 12 | */ 13 | public class Task4 implements StatisticTask> { 14 | @Override 15 | public LinkedList calculate(List departments) { 16 | return departments.stream() 17 | .sorted(Comparator.comparing(Department::getName)) 18 | .collect(Collectors.toCollection(LinkedList::new)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task1.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * На месте комментария написать код, который присвоит переменной a значение переменной b и наоборот. 5 | * Подсказка: можно использовать третью переменную. 6 | */ 7 | public class Task1 { 8 | public static void main(String[] args) { 9 | int a = 5; 10 | int b = 10; 11 | 12 | // Вводим переменную temp, куда записыванием значение переменной a 13 | int temp = a; //temp == 5 14 | // Присваиваем переменной a значением переменной b 15 | a = b; //a == 10 16 | // Присваиваем переменной и значение temp, куда ранее записали изначальное значение a 17 | b = temp; //b == 5 18 | 19 | System.out.println("Значение а: " + a + ". Значение b: " + b); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task1_catchException/service/FileService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task1_catchException.service; 2 | 3 | import com.walking.lesson20_exceptions.task1_catchException.model.File; 4 | 5 | import java.io.FileNotFoundException; 6 | 7 | public class FileService { 8 | private final File[] files; 9 | 10 | public FileService(File[] files) { 11 | this.files = files; 12 | } 13 | 14 | public File findFile(String name) throws FileNotFoundException { 15 | for (File f : files) { 16 | if (f.getName().equals(name)) { 17 | return f; 18 | } 19 | } 20 | 21 | throw new FileNotFoundException("File not found"); 22 | // Обратите внимание: после выбрасывания исключения не нужен return 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task2/model/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task2.model; 2 | 3 | //Абстрактный класс не позволит создать объект этого типа 4 | public abstract class EquilateralShape { 5 | public static final String EMPTY_ELEMENT = " "; 6 | public static final String EMPTY_STRING = ""; 7 | public static final char NEW_LINE_SYMBOL = '\n'; 8 | 9 | protected final int length; 10 | 11 | protected EquilateralShape(int length) { 12 | this.length = length; 13 | } 14 | 15 | public int getLength() { 16 | return length; 17 | } 18 | 19 | // Абстрактный метод избавляет от необходимости продумывать реализацию, демонстрирующую, 20 | // что данный метод должен быть переопределен 21 | public abstract String createShapeString(); 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.service; 2 | 3 | import com.walking.lesson46_lambda.task3.model.Car; 4 | 5 | import java.util.Collection; 6 | import java.util.HashSet; 7 | import java.util.Set; 8 | import java.util.function.Predicate; 9 | 10 | public class CarService { 11 | private final Set cars; 12 | 13 | public CarService(Collection cars) { 14 | this.cars = new HashSet<>(cars); 15 | } 16 | 17 | public Set findCars(Predicate predicate) { 18 | Set filteredCars = new HashSet<>(); 19 | 20 | cars.forEach(car -> { 21 | if (predicate.test(car)) { 22 | filteredCars.add(car); 23 | } 24 | }); 25 | 26 | return filteredCars; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/walking/lesson7_varargs_overloading/Task1.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson7_varargs_overloading; 2 | 3 | /** 4 | * Написать программу, которая объединяет любое количество строк, 5 | * объединяя их через пробел. 6 | * Реализацию конкатенации строк вынести в отдельный метод. 7 | */ 8 | public class Task1 { 9 | public static void main(String[] args) { 10 | String result = mergeStrings("a", "a", "a", "a", "a", "a", "a", "a", "a"); 11 | 12 | System.out.println(result); 13 | } 14 | 15 | static String mergeStrings(String... strings) { 16 | if (strings.length == 0) { 17 | return ""; 18 | } 19 | 20 | var result = ""; 21 | 22 | for (String s : strings) { 23 | result += " " + s; 24 | } 25 | 26 | return result; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task1_throwsException/service/FileService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task1_throwsException.service; 2 | 3 | import com.walking.lesson20_exceptions.task1_throwsException.model.File; 4 | 5 | import java.io.FileNotFoundException; 6 | 7 | public class FileService { 8 | private final File[] files; 9 | 10 | public FileService(File[] files) { 11 | this.files = files; 12 | } 13 | 14 | public File findFile(String name) throws FileNotFoundException { 15 | for (File f : files) { 16 | if (f.getName().equals(name)) { 17 | return f; 18 | } 19 | } 20 | 21 | throw new FileNotFoundException("File not found"); 22 | // Обратите внимание: после выбрасывания исключения не нужен return 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task2/model/Animal.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task2.model; 2 | 3 | public class Animal { 4 | // Поле, которое будет хранить имя класса, чтобы идентифицировать наследника 5 | private final String className; 6 | // Выполнение доп. условия. Если методы наследников лишь обращаются к sound() - 7 | // нам необходимо делать вывод звука животного в этом классе. Значит, звук животного 8 | // нужно куда-то записать 9 | private final String sound; 10 | 11 | protected Animal(String className, String sound) { 12 | this.className = className; 13 | this.sound = sound; 14 | } 15 | 16 | protected void sound() { 17 | System.out.println(sound); 18 | } 19 | 20 | public String getClassName() { 21 | return className; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task13.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * Предоставьте информацию о среднем возрасте сотрудников компании. 12 | */ 13 | public class Task13 implements StatisticTask { 14 | @Override 15 | public Double calculate(List departments) { 16 | return departments.stream() 17 | .map(Department::getEmployees) 18 | .flatMap(Collection::stream) 19 | .collect(Collectors.averagingInt(Employee::getAge)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson37_collection_list/task1/model/Counter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson37_collection_list.task1.model; 2 | 3 | public class Counter { 4 | private final String name; 5 | private final String unit; 6 | 7 | private int value; 8 | 9 | public Counter(String name, String unit) { 10 | this(name, unit, 0); 11 | } 12 | 13 | public Counter(String name, String unit, int value) { 14 | this.value = value; 15 | this.unit = unit; 16 | this.name = name; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public String getUnit() { 24 | return unit; 25 | } 26 | 27 | public int getValue() { 28 | return value; 29 | } 30 | 31 | public void setValue(int value) { 32 | this.value = value; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/com/walking/lesson39_queue1/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson39_queue1.task2; 2 | 3 | import com.walking.lesson39_queue1.task2.collection.Stack; 4 | 5 | /** 6 | * Реализуйте структуру данных стек. Используйте односвязный список из Задачи 1. 7 | * При этом изменять сам класс, реализующий односвязный список, недопустимо. 8 | */ 9 | public class Main { 10 | public static void main(String[] args) { 11 | Stack stack = new Stack<>(); 12 | stack.push(1); 13 | stack.push(2); 14 | stack.push(3); 15 | 16 | System.out.println(stack.pop());//3 17 | System.out.println(stack.pop());//2 18 | 19 | stack.push(4); 20 | 21 | System.out.println(stack.pop());//4 22 | System.out.println(stack.pop());//1 23 | 24 | System.out.println(stack.pop());//NPE 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.service; 2 | 3 | import com.walking.lesson47_method_reference.task3.model.Car; 4 | 5 | import java.util.Collection; 6 | import java.util.HashSet; 7 | import java.util.Set; 8 | import java.util.function.Predicate; 9 | 10 | public class CarService { 11 | private final Set cars; 12 | 13 | public CarService(Collection cars) { 14 | this.cars = new HashSet<>(cars); 15 | } 16 | 17 | public Set findCars(Predicate predicate) { 18 | Set filteredCars = new HashSet<>(); 19 | 20 | cars.forEach(car -> { 21 | if (predicate.test(car)) { 22 | filteredCars.add(car); 23 | } 24 | }); 25 | 26 | return filteredCars; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/walking/lesson72_blocking_non_blocking_queue/task1/service/TaskService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson72_blocking_non_blocking_queue.task1.service; 2 | 3 | import com.walking.lesson72_blocking_non_blocking_queue.task1.model.Task; 4 | 5 | import java.util.concurrent.BlockingQueue; 6 | import java.util.concurrent.LinkedBlockingQueue; 7 | 8 | public class TaskService { 9 | private final BlockingQueue tasks = new LinkedBlockingQueue<>(); 10 | 11 | public Task add(Task task) throws InterruptedException { 12 | tasks.put(task); 13 | System.out.printf("Task '%s' added!\n", task.getName()); 14 | 15 | return task; 16 | } 17 | 18 | public void complete() throws InterruptedException { 19 | Task task = tasks.take(); 20 | System.out.printf("Task '%s' completed!\n", task.getName()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson29_generics2/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson29_generics2.task2; 2 | 3 | import com.walking.lesson29_generics2.task2.model.NumberExponentiater; 4 | 5 | /** 6 | * Используя Задачу 1 из урока Generics. Часть I, 7 | * реализуйте в Main метод, принимающий аргументом объект подходящего 8 | * для дженерика типа и возвращающий объект дженерика. 9 | * Допустима параметризация только с использованием wildcard. 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | NumberExponentiater integerExponentiater = createNumberExponentiater(1); 14 | System.out.println(integerExponentiater.getNumber()); 15 | } 16 | 17 | private static NumberExponentiater createNumberExponentiater(Number number) { 18 | return new NumberExponentiater<>(number); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/model/TextElement.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.model; 2 | 3 | public class TextElement { 4 | private final String element; 5 | private String joinedElement; 6 | private TextElement[] children; 7 | 8 | public TextElement(String element) { 9 | this.element = element; 10 | } 11 | 12 | public String getElement() { 13 | return element; 14 | } 15 | 16 | public TextElement[] getChildren() { 17 | return children; 18 | } 19 | 20 | public void setChildren(TextElement[] children) { 21 | this.children = children; 22 | } 23 | 24 | public String getJoinedElement() { 25 | return joinedElement; 26 | } 27 | 28 | public void setJoinedElement(String joinedElement) { 29 | this.joinedElement = joinedElement; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/parser/ParagraphParser.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.parser; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public class ParagraphParser extends AbstractParser { 6 | 7 | @Override 8 | public TextElement parse(TextElement textElement) { 9 | String formattedStr = textElement.getElement() 10 | .replaceAll("\\.{3}", ".") 11 | .replaceAll("[?!]{1,2}", "."); 12 | 13 | String[] parsedStrings = formattedStr.split("\\."); 14 | TextElement[] children = new TextElement[parsedStrings.length]; 15 | 16 | for (int i = 0; i < parsedStrings.length; i++) { 17 | children[i] = new TextElement(parsedStrings[i]); 18 | } 19 | 20 | textElement.setChildren(children); 21 | 22 | return textElement; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/EquilateralShape.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task1_abstract_class.model; 2 | 3 | //Абстрактный класс не позволит создать объект этого типа 4 | public abstract class EquilateralShape { 5 | public static final String EMPTY_ELEMENT = " "; 6 | public static final String EMPTY_STRING = ""; 7 | public static final char NEW_LINE_SYMBOL = '\n'; 8 | 9 | protected final int length; 10 | 11 | protected EquilateralShape(int length) { 12 | this.length = length; 13 | } 14 | 15 | public int getLength() { 16 | return length; 17 | } 18 | 19 | // Абстрактный метод избавляет от необходимости продумывать реализацию, демонстрирующую, 20 | // что данный метод должен быть переопределен 21 | public abstract String createShapeString(); 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson10_static_constants/task2/Counter.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson10_static_constants.task2; 2 | 3 | public class Counter { 4 | // Обеспечиваем неизменность названия, используя final 5 | public final String name; 6 | public int counter; 7 | 8 | public Counter(String name) { 9 | this(name, 0); 10 | } 11 | 12 | public Counter(String name, int counter) { 13 | this.counter = counter; 14 | this.name = name; 15 | } 16 | 17 | public int increase(int value) { 18 | counter += value; 19 | 20 | return counter; 21 | } 22 | 23 | public int decrease(int value) { 24 | counter -= value; 25 | 26 | return counter; 27 | } 28 | 29 | public int increment() { 30 | return ++counter; 31 | } 32 | 33 | public int decrement() { 34 | return --counter; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/parser/SentenceParser.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.parser; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | 5 | public class SentenceParser extends AbstractParser { 6 | @Override 7 | public TextElement parse(TextElement textElement) { 8 | String formattedStr = textElement.getElement() 9 | .replaceAll("[,:]", " ") 10 | .replaceAll(" - ", " ") 11 | .trim(); 12 | 13 | String[] parsedStrings = formattedStr.split(" +"); 14 | TextElement[] children = new TextElement[parsedStrings.length]; 15 | 16 | for (int i = 0; i < parsedStrings.length; i++) { 17 | children[i] = new TextElement(parsedStrings[i]); 18 | } 19 | 20 | textElement.setChildren(children); 21 | 22 | return textElement; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson34_date_time/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson34_date_time.task1; 2 | 3 | import java.time.LocalDateTime; 4 | import java.time.format.DateTimeFormatter; 5 | 6 | /** 7 | * Реализуйте метод, возвращающий объект LocalDateTime на основании переданной строки. 8 | * Пример входящей строки: 20.12.2022 20:16:00. 9 | */ 10 | public class Main { 11 | public static final String FORMATTER_PATTERN = "dd.MM.yyyy HH:mm:ss"; 12 | public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern(FORMATTER_PATTERN); 13 | 14 | public static void main(String[] args) { 15 | System.out.println(parseDate("20.12.2022 20:16:00")); 16 | System.out.println(parseDate("20.06.2002 20:24:44")); 17 | } 18 | 19 | private static LocalDateTime parseDate(String date) { 20 | return LocalDateTime.parse(date, FORMATTER); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task6.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.stream.Collectors; 8 | 9 | /** 10 | * Предоставьте информацию о проценте открытых вакансий 11 | * относительно текущего числа сотрудников по каждому департаменту. 12 | */ 13 | public class Task6 implements StatisticTask> { 14 | @Override 15 | public Map calculate(List departments) { 16 | return departments.stream() 17 | .collect(Collectors.toMap( 18 | Department::getName, 19 | department -> (double) department.getVacancyAmount() / department.getEmployees().size())); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task10.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.stream.Collectors; 10 | 11 | /** 12 | * Предоставьте список сотрудников по каждому имени. 13 | */ 14 | public class Task10 implements StatisticTask>> { 15 | @Override 16 | public Map> calculate(List departments) { 17 | return departments.stream() 18 | .map(Department::getEmployees) 19 | .flatMap(Collection::stream) 20 | .collect(Collectors.groupingBy(Employee::getName)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task2.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.Set; 9 | import java.util.stream.Collectors; 10 | 11 | /** 12 | * Предоставьте полный перечень оригинальных имен сотрудников компании. 13 | */ 14 | public class Task2 implements StatisticTask> { 15 | @Override 16 | public Set calculate(List departments) { 17 | return departments.stream() 18 | .map(Department::getEmployees) 19 | .flatMap(Collection::stream) 20 | .map(Employee::getName) 21 | .collect(Collectors.toSet()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task2_2/model/Accident.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task2_2.model; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | public class Accident { 6 | private final long id; 7 | private final LocalDateTime date; 8 | private final LocalDateTime updated; 9 | private final String details; 10 | 11 | public Accident(long id, LocalDateTime date, String details, LocalDateTime updated) { 12 | this.id = id; 13 | this.date = date; 14 | this.details = details; 15 | this.updated = updated; 16 | } 17 | 18 | public long getId() { 19 | return id; 20 | } 21 | 22 | public LocalDateTime getDate() { 23 | return date; 24 | } 25 | 26 | public String getDetails() { 27 | return details; 28 | } 29 | 30 | public LocalDateTime getUpdated() { 31 | return updated; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/com/walking/lesson52_stream_creation/task2_limit/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson52_stream_creation.task2_limit; 2 | 3 | import java.time.LocalDate; 4 | import java.time.format.DateTimeFormatter; 5 | import java.util.stream.Stream; 6 | 7 | /** 8 | * Реализуйте программу, выводящую в консоль все даты текущего месяца. 9 | * Используйте Stream.limit() 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | LocalDate startDate = LocalDate.now().withDayOfMonth(1); 14 | int monthDaysAmount = startDate.getMonth().length(startDate.isLeapYear()); 15 | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 16 | 17 | Stream.iterate(startDate, date -> date.plusDays(1)) 18 | .limit(monthDaysAmount) 19 | .map(date -> date.format(formatter)) 20 | .forEach(System.out::println); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson17_enum/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson17_enum.task1; 2 | 3 | import com.walking.lesson17_enum.task1.answer.GreetingType; 4 | 5 | import java.util.Scanner; 6 | 7 | /** 8 | * Реализуйте задачу 9 | * ... 10 | * через enum. В т.ч. реализуйте в enum'е поиск значения по фразе, 11 | * введенной пользователем. Напоминаю, что enum'ы могут содержать поля. 12 | */ 13 | public class Main { 14 | public static void main(String[] args) { 15 | Scanner scanner = new Scanner(System.in); 16 | 17 | System.out.print("Enter string: "); 18 | String greeting = scanner.nextLine(); 19 | 20 | scanner.close(); 21 | 22 | GreetingType greetingType = GreetingType.findGreetingType(greeting); 23 | System.out.println(greetingType.getAnswer()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task18.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.stream.Collectors; 10 | 11 | /** 12 | * Предоставьте список сотрудников женского пола и сотрудников мужского пола в компании. 13 | */ 14 | public class Task18 implements StatisticTask>> { 15 | @Override 16 | public Map> calculate(List departments) { 17 | return departments.stream() 18 | .map(Department::getEmployees) 19 | .flatMap(Collection::stream) 20 | .collect(Collectors.partitioningBy(Employee::isMale)); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/com/walking/lesson68_semaphore/task3/model/Philosopher.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson68_semaphore.task3.model; 2 | 3 | import java.util.Set; 4 | import java.util.SortedSet; 5 | import java.util.TreeSet; 6 | 7 | public class Philosopher { 8 | private final String name; 9 | private final SortedSet forkNumbers = new TreeSet<>(); 10 | 11 | private int eatenCounter; 12 | 13 | public Philosopher(String name, Set forkNumbers) { 14 | this.name = name; 15 | this.forkNumbers.addAll(forkNumbers); 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public SortedSet getForkNumbers() { 23 | return forkNumbers; 24 | } 25 | 26 | public int getEatenCounter() { 27 | return eatenCounter; 28 | } 29 | 30 | public void setEatenCounter(int eatenCounter) { 31 | this.eatenCounter = eatenCounter; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task2/model/WholesaleBase.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task2.model; 2 | 3 | public class WholesaleBase { 4 | private final long maxProductAmount; 5 | private final double minProductAmountPercent; 6 | 7 | private long productAmount; 8 | 9 | public WholesaleBase(long maxProductAmount, double minProductAmountPercent) { 10 | this.maxProductAmount = maxProductAmount; 11 | this.minProductAmountPercent = minProductAmountPercent; 12 | } 13 | 14 | public long getMaxProductAmount() { 15 | return maxProductAmount; 16 | } 17 | 18 | public double getMinProductAmountPercent() { 19 | return minProductAmountPercent; 20 | } 21 | 22 | public long getProductAmount() { 23 | return productAmount; 24 | } 25 | 26 | public void setProductAmount(long productAmount) { 27 | this.productAmount = productAmount; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/com/walking/lesson21_immutable_object/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson21_immutable_object.service; 2 | 3 | import com.walking.lesson21_immutable_object.model.Car; 4 | import com.walking.lesson21_immutable_object.model.CarIdentifier; 5 | 6 | public class CarService { 7 | private final Car[] cars; 8 | 9 | public CarService(Car[] cars) { 10 | this.cars = cars; 11 | } 12 | 13 | // Упростим реализацию метода в сравнении с вариантом в уроке 19 для большей наглядности 14 | public Car findCar(CarIdentifier identifier) { 15 | for (Car c : cars) { 16 | // Нет особого смысла реализовывать и использовать equals() для Car, по крайне мере, 17 | // для операции поиска 18 | if (c.getIdentifier().equals(identifier)) { 19 | return c; 20 | } 21 | } 22 | 23 | // По желанию можно выбросить исключение 24 | return null; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task2; 2 | 3 | import com.walking.lesson46_lambda.task2.model.Cat; 4 | import com.walking.lesson46_lambda.task2.model.Cow; 5 | import com.walking.lesson46_lambda.task2.model.Dog; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * Знакомимся с функциональным интерфейсом Consumer. 11 | * Используя реализацию Задачи 3 из урока 16 по ссылке: 12 | * ... 13 | * замените массив на список, 14 | * а цикл for – на вызов метода forEach(), 15 | * который доступен для всех наследников Iterable. 16 | * Он теперь будет вашим другом и надежным соратником:) 17 | */ 18 | public class Main { 19 | public static void main(String[] args) { 20 | List.of(new Cat(), new Dog(), new Cow()) 21 | .forEach(animal -> animal.sound()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson4_cycles/Task1.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson4_cycles; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Ввести с клавиатуры целое число. 7 | * Вывести в консоль его факториал. 8 | */ 9 | public class Task1 { 10 | public static void main(String[] args) { 11 | Scanner scanner = new Scanner(System.in); 12 | 13 | System.out.print("Enter number: "); 14 | int number = scanner.nextInt(); 15 | 16 | scanner.close(); 17 | 18 | if (number < 0) { //Факториал отрицательного числа не существует 19 | System.out.println("The number must be at least 0"); 20 | } else { 21 | int result = 1; 22 | 23 | // Для number == 0 цикл не будет выполнен ни разу (0! == 1), в остальных случаях будет произведен расчет 24 | for (int i = 1; i <= number; i++) { 25 | result *= i; 26 | } 27 | 28 | System.out.println(result); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /resources/sql/lesson_95_union/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Верните все имена и фамилии из таблиц passenger_female, passenger_male и passenger. 3 | -- Исключите дубликаты (не только возникающие при объединении выборок). 4 | select distinct first_name, last_name from ( 5 | select first_name, last_name from passenger 6 | union 7 | select first_name, last_name from passenger_male 8 | union 9 | select first_name, last_name from passenger_female 10 | ); 11 | 12 | -- Задача 2 13 | -- Получите всю информацию о первых трех самых старых пассажиров, 14 | -- имеющих хотя бы один любимый аэропорт, 15 | -- из объединенных таблиц passenger_female, passenger_male. 16 | select * from ( 17 | select * from passenger_male 18 | where cardinality(favorite_airports) > 0 19 | order by birth_date desc limit 3 20 | union 21 | select * from passenger_female 22 | where cardinality(favorite_airports) > 0 23 | order by birth_date desc limit 3 24 | ) p 25 | order by birth_date desc limit 3; -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task1WithoutAdditionalVar.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * На месте комментария написать код, который присвоит переменной a значение переменной b и наоборот. 5 | * Вариант на подумать: реализовать задачу, НЕ используя третью переменную. 6 | */ 7 | public class Task1WithoutAdditionalVar { 8 | public static void main(String[] args) { 9 | int a = 5; 10 | int b = 10; 11 | 12 | // Присваиваем переменной а результат сложения a и b 13 | a = a + b; //a == 15 14 | // Присваиваем переменной b значение разности a и b, 15 | // где a == изначальное значение a + b 16 | b = a - b; //b == 5 17 | 18 | // Присваиваем переменной b значение разности a и b, 19 | // где a == (изначальное значение a) + b, 20 | // b == значальное значение a 21 | a = a - b; //a == 10 22 | 23 | System.out.println("Значение а: " + a + ". Значение b: " + b); 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/walking/lesson4_cycles/Task2.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson4_cycles; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Ввести с клавиатуры целое число. 7 | * Вывести в консоль сумму цифр введенного числа. 8 | */ 9 | public class Task2 { 10 | public static void main(String[] args) { 11 | Scanner scanner = new Scanner(System.in); 12 | 13 | System.out.print("Enter number: "); 14 | int number = scanner.nextInt(); 15 | 16 | scanner.close(); 17 | 18 | int digitSum = 0; 19 | 20 | while (number != 0) { 21 | // Последняя цифра числа == остаток от его деления на 10 22 | digitSum += number % 10; 23 | // Исключаем цифру, которую уже учли в сумме 24 | number /= 10; 25 | } 26 | 27 | // сумма цифр даже отрицательного числа должна быть положительна 28 | if (digitSum < 0) { 29 | digitSum *= -1; 30 | } 31 | 32 | System.out.println(digitSum); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task1/service/MessageHolder.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task1.service; 2 | 3 | // В контексте пересылки одного сообщения класс получается упрощенным. 4 | // Будем считать, что его задача - хранить текущее сообщение и статус "Получено/Не получено". 5 | // Вызов сеттера будет расцениваться как сброс "полученности" сообщения - ведь новое сообщение не получено 6 | public class MessageHolder { 7 | private String message; 8 | private boolean received = true; 9 | 10 | public String getMessage() { 11 | return message; 12 | } 13 | 14 | public void setMessage(String message) { 15 | this.message = message; 16 | this.received = false; 17 | } 18 | 19 | public boolean isReceived() { 20 | return received; 21 | } 22 | 23 | // Сеттер без параметра. В ручном режиме ожидаем только установку статуса "Прочитано". 24 | public void setReceived() { 25 | this.received = true; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/walking/lesson42_tree/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson42_tree.task2; 2 | 3 | import com.walking.lesson42_tree.task2.structure.AvlTree; 4 | 5 | /** 6 | * Реализуйте АВЛ-дерево. 7 | * Сопроводите действия по добавлению (и последующей балансировке) 8 | * и удалению элементов выводом соответствующих сообщений в консоль. 9 | */ 10 | public class Main { 11 | public static void main(String[] args) { 12 | AvlTree tree = new AvlTree<>(); 13 | tree.add(4); 14 | tree.add(5); 15 | tree.add(2); 16 | tree.add(1); 17 | tree.add(3); 18 | tree.add(6); 19 | tree.add(7); 20 | tree.add(7); 21 | tree.remove(6); 22 | tree.remove(10); 23 | tree.add(8); 24 | tree.add(1); 25 | tree.add(8); 26 | tree.add(9); 27 | tree.add(10); 28 | tree.add(11); 29 | tree.add(12); 30 | tree.add(13); 31 | tree.add(14); 32 | tree.add(15); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task14.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * Предоставьте информацию о среднем возрасте сотрудников по каждому департаменту. 12 | */ 13 | public class Task14 implements StatisticTask> { 14 | @Override 15 | public Map calculate(List departments) { 16 | return departments.stream() 17 | .collect(Collectors.groupingBy( 18 | Department::getName, 19 | Collectors.flatMapping( 20 | department -> department.getEmployees().stream(), 21 | Collectors.averagingInt(Employee::getAge)))); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson7_varargs_overloading/Task3.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson7_varargs_overloading; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Вычислите факториал введенного с клавиатуры целого числа, используя рекурсивный алгоритм. 7 | */ 8 | public class Task3 { 9 | public static void main(String[] args) { 10 | Scanner scanner = new Scanner(System.in); 11 | 12 | System.out.print("Enter number: "); 13 | int number = scanner.nextInt(); 14 | 15 | scanner.close(); 16 | 17 | if (number < 0) { 18 | System.out.println("The number must be at least 0"); 19 | return; 20 | } 21 | 22 | System.out.println(calculateFactorial(number)); 23 | } 24 | 25 | static long calculateFactorial(int number) { 26 | if (number == 0) { 27 | return 1; 28 | } 29 | 30 | if (number == 1) { 31 | return 1; 32 | } 33 | 34 | return number * calculateFactorial(number - 1); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task2_1/model/Accident.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task2_1.model; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | public class Accident { 6 | // Поля неизменяемы, чтобы избежать изменения объекта без изменения его даты обновления. 7 | // Или в обход сервиса 8 | private final long id; 9 | private final LocalDateTime date; 10 | private final LocalDateTime updated; 11 | private final String details; 12 | 13 | public Accident(long id, LocalDateTime date, String details, LocalDateTime updated) { 14 | this.id = id; 15 | this.date = date; 16 | this.details = details; 17 | this.updated = updated; 18 | } 19 | 20 | public long getId() { 21 | return id; 22 | } 23 | 24 | public LocalDateTime getDate() { 25 | return date; 26 | } 27 | 28 | public String getDetails() { 29 | return details; 30 | } 31 | 32 | public LocalDateTime getUpdated() { 33 | return updated; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task11.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.SortedMap; 9 | import java.util.TreeMap; 10 | import java.util.stream.Collectors; 11 | 12 | /** 13 | * Предоставьте список сотрудников по каждому имени. 14 | * Имена должны быть представлены в алфавитном порядке. 15 | */ 16 | public class Task11 implements StatisticTask>> { 17 | @Override 18 | public SortedMap> calculate(List departments) { 19 | return departments.stream() 20 | .map(Department::getEmployees) 21 | .flatMap(Collection::stream) 22 | .collect(Collectors.groupingBy(Employee::getName, TreeMap::new, Collectors.toList())); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task2MultipleChar.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * Используя несколько переменных типа char вывести свое имя в консоль. 5 | */ 6 | public class Task2MultipleChar { 7 | public static void main(String[] args) { 8 | // Объявляем переменную типа char и инициализируем ее буквой имени 9 | char ch1 = 'Е'; 10 | // Выводим значение переменной ch1 в консоль 11 | System.out.print(ch1); 12 | 13 | // Повторяем действия до тех пор, пока буквы в имени не кончатся 14 | char ch2 = 'г'; 15 | System.out.print(ch2); 16 | 17 | char ch3 = 'о'; 18 | System.out.print(ch3); 19 | 20 | char ch4 = 'р'; 21 | System.out.print(ch4); 22 | } 23 | 24 | /* 25 | * Примечание: также можно было выводить не символы, а строки вида "" + ch1 + ch2..., например: 26 | * System.out.print("" + ch1 + ch2 + ch3 + ch4); 27 | * 28 | * Однако на данном этапе конкатенация строк не была пройдена 29 | * */ 30 | } 31 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task1; 2 | 3 | import java.time.LocalDateTime; 4 | import java.time.temporal.ChronoUnit; 5 | import java.util.concurrent.TimeUnit; 6 | 7 | /** 8 | * Напишите программу, которая пишет в консоль текущее время каждый две секунды, 9 | * пока программа запущена. 10 | */ 11 | public class Main { 12 | public static void main(String[] args) throws InterruptedException { 13 | new Thread(getTimeTrackerTask()).start(); 14 | } 15 | 16 | private static Runnable getTimeTrackerTask() { 17 | return () -> { 18 | while (true) { 19 | System.out.println(LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS)); //округляем до секунд 20 | 21 | try { 22 | TimeUnit.SECONDS.sleep(2); // Удобная обертка над Thread.sleep() 23 | } catch (InterruptedException e) { 24 | throw new RuntimeException(e); 25 | } 26 | } 27 | }; 28 | } 29 | } -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task21.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.IntSummaryStatistics; 8 | import java.util.List; 9 | import java.util.Map; 10 | import java.util.stream.Collectors; 11 | 12 | /** 13 | * Предоставьте информацию по минимальному, 14 | * максимальному и среднего возрасту сотрудников на каждой должности. 15 | */ 16 | public class Task21 implements StatisticTask> { 17 | @Override 18 | public Map calculate(List departments) { 19 | return departments.stream() 20 | .map(Department::getEmployees) 21 | .flatMap(Collection::stream) 22 | .collect(Collectors.groupingBy(Employee::getPosition, Collectors.summarizingInt(Employee::getAge))); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task1/service/MessageReceivingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task1.service; 2 | 3 | public class MessageReceivingService { 4 | private final MessageHolder messageHolder; 5 | 6 | public MessageReceivingService(MessageHolder messageHolder) { 7 | this.messageHolder = messageHolder; 8 | } 9 | 10 | public String receive() { 11 | synchronized (messageHolder) { 12 | while (messageHolder.isReceived() || messageHolder.getMessage() == null) { 13 | try { 14 | messageHolder.wait(); 15 | } catch (InterruptedException e) { 16 | throw new RuntimeException(e); 17 | } 18 | } 19 | 20 | String message = messageHolder.getMessage(); 21 | System.out.printf("Received message: '%s'%n", message); 22 | 23 | messageHolder.setReceived(); 24 | messageHolder.notifyAll(); 25 | 26 | return message; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/com/walking/lesson75_thread_pool/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson75_thread_pool.task1; 2 | 3 | import java.time.LocalDateTime; 4 | import java.time.format.DateTimeFormatter; 5 | import java.util.concurrent.Executors; 6 | import java.util.concurrent.TimeUnit; 7 | 8 | /** 9 | * Реализуйте программу, которая выводит актуальное время каждую минуту, 10 | * начиная с текущего момента. 11 | * Не используйте Thread.sleep() или циклы. 12 | */ 13 | public class Main { 14 | private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss"); 15 | 16 | public static void main(String[] args) { 17 | Executors.newSingleThreadScheduledExecutor() 18 | .scheduleAtFixedRate( 19 | () -> System.out.println(getCurrentDateTimeFormatted()), 20 | 0, 1, TimeUnit.MINUTES); 21 | } 22 | 23 | private static String getCurrentDateTimeFormatted() { 24 | return LocalDateTime.now() 25 | .format(DATE_TIME_FORMATTER); 26 | } 27 | } -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task3/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task3; 2 | 3 | /** 4 | * Уже на текущем этапе мы можем распараллелить какие-то действия с помощью многопоточности. 5 | * Но иногда требуется выполнить определенную операцию в другом потоке и получить ее результат. 6 | * Поскольку Runnable не позволяет вернуть что-либо из метода – реализуйте класс/классы, 7 | * которые позволят получать некий результат операции, выполненной в другом потоке. 8 | *

9 | * Рекомендую использовать интерфейс Callable для описания операции. 10 | * Его метод имеет возвращаемое значение. 11 | */ 12 | public class Main { 13 | public static void main(String[] args) throws InterruptedException { 14 | var callableThread = new CallableThread<>(() -> Thread.currentThread().getName()); 15 | callableThread.start(); 16 | System.out.println(callableThread.getResult()); 17 | 18 | callableThread = new CallableThread<>(() -> Thread.currentThread().getName()); 19 | System.out.println(callableThread.startAndGet()); 20 | } 21 | } -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task2_1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task2_1; 2 | 3 | /** 4 | * Реализуйте систему диспетчерской для аварийной службы. 5 | *

6 | * В диспетчерскую могут поступать сообщения об авариях из разных источников (разных потоков), 7 | * в т.ч. различные сведения об одной и той же аварии. 8 | * Требуется обрабатывать и сохранять (в коллекцию) данную информацию. 9 | * Рекомендую делать привязку к уникальному идентификатору аварии и дате информации. 10 | * Удаление информации о случившихся авариях не предусмотрено. 11 | *

12 | * Также требуется предоставлять информацию об авариях сотрудникам диспетчерской по запросам. 13 | * Одному сотруднику соответствует один поток выполнения. 14 | * Возможна ситуация, когда сотрудник запрашивает информацию сразу о нескольких авариях. 15 | *

16 | * Запросы информации сотрудниками происходят на порядок чаще поступления обновлений из источников. 17 | */ 18 | public class Main { 19 | public static void main(String[] args) { 20 | // Место для ваших тестов 21 | } 22 | } -------------------------------------------------------------------------------- /src/com/walking/lesson41_set/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson41_set.task2; 2 | 3 | import java.util.HashSet; 4 | import java.util.List; 5 | import java.util.Scanner; 6 | import java.util.Set; 7 | 8 | /** 9 | * Реализуйте задачу 10 | * ..., 11 | * используя Set. 12 | */ 13 | public class Main { 14 | public static void main(String[] args) { 15 | Scanner scanner = new Scanner(System.in); 16 | 17 | System.out.print("Enter words: "); 18 | String[] words = scanner.nextLine() 19 | .trim() 20 | .toLowerCase() 21 | .split(" "); 22 | 23 | scanner.close(); 24 | 25 | // Пройти foreach по words, добавляя каждый элемент в сет - тоже решение. 26 | // Правда, IDEA порекомендует заменить его на set.addAll() 27 | Set uniqueWords = new HashSet<>(List.of(words)); 28 | 29 | System.out.printf("Found %d unique words\n", uniqueWords.size()); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task19.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | import java.util.stream.Collectors; 9 | 10 | /** 11 | * Предоставьте список сотрудников женского пола и сотрудников мужского пола по каждому департаменту. 12 | */ 13 | public class Task19 implements StatisticTask>>> { 14 | @Override 15 | public Map>> calculate(List departments) { 16 | return departments.stream() 17 | .collect(Collectors.groupingBy( 18 | Department::getName, 19 | Collectors.flatMapping( 20 | department -> department.getEmployees().stream(), 21 | Collectors.partitioningBy(Employee::isMale)))); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson58_collection_lamda_param/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson58_collection_lamda_param.task1; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Employee; 4 | 5 | import java.util.HashMap; 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * Используя классы из практики к уроку 57, 11 | * реализуйте метод, принимающий на вход список сотрудников и возвращающий 12 | * самого старшего обладателя каждого имени. 13 | */ 14 | public class Main { 15 | public static void main(String[] args) { 16 | var employees = List.of(new Employee()); // some init 17 | 18 | System.out.println(getOlderEmployeeByName(employees)); 19 | } 20 | 21 | private static Map getOlderEmployeeByName(List employees) { 22 | var olderByName = new HashMap(); 23 | 24 | for (Employee e : employees) { 25 | olderByName.compute(e.getName(), (k, v) -> v == null || e.getAge() > v.getAge() ? e : v); 26 | } 27 | 28 | return olderByName; 29 | } 30 | } -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task3/CallableThread.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task3; 2 | 3 | import java.util.Objects; 4 | import java.util.concurrent.Callable; 5 | 6 | public class CallableThread { 7 | private final Thread thread; 8 | private R result; 9 | 10 | public CallableThread(Callable callable) { 11 | Objects.requireNonNull(callable); 12 | 13 | this.thread = new Thread(() -> { 14 | try { 15 | this.result = callable.call(); 16 | } catch (Exception e) { 17 | throw new RuntimeException(e); 18 | } 19 | }); 20 | } 21 | 22 | public R startAndGet() throws InterruptedException { 23 | thread.start(); 24 | thread.join(); 25 | 26 | return result; 27 | } 28 | 29 | public R getResult() throws InterruptedException { 30 | if (thread.isAlive()) { 31 | thread.join(); 32 | } 33 | 34 | return result; 35 | } 36 | 37 | public void start() { 38 | thread.start(); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task2_2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task2_2; 2 | 3 | /** 4 | * Реализуйте систему диспетчерской для аварийной службы. 5 | *

6 | * В диспетчерскую могут поступать сообщения об авариях из разных источников (разных потоков), 7 | * в т.ч. различные сведения об одной и той же аварии. 8 | * Требуется обрабатывать и сохранять (в коллекцию) данную информацию. 9 | * Рекомендую делать привязку к уникальному идентификатору аварии и дате информации. 10 | * Удаление информации о случившихся авариях не предусмотрено. 11 | *

12 | * Также требуется предоставлять информацию об авариях сотрудникам диспетчерской по запросам. 13 | * Одному сотруднику соответствует один поток выполнения. 14 | * Возможна ситуация, когда сотрудник запрашивает информацию сразу о нескольких авариях. 15 | *

16 | * Частота запросов информации сотрудниками находится в паритете с частотой обновления информации из источников. 17 | */ 18 | public class Main { 19 | public static void main(String[] args) { 20 | // Место для ваших тестов 21 | } 22 | } -------------------------------------------------------------------------------- /src/com/walking/lesson29_generics2/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson29_generics2.task1; 2 | 3 | import com.walking.lesson29_generics2.task1.model.Generic; 4 | 5 | /** 6 | * Реализуйте обобщенный тип, хранящий параметризованное поле. 7 | * Также в классе Main реализуйте параметризованый метод, 8 | * принимает первым параметром объект вашего дженерика, 9 | * вторым — объект типа, которым параметризован объект первого параметра. 10 | * Метод должен возвращать значение поля дженерика, если оно != null, 11 | * в противном случае — возвращать второй параметр. 12 | */ 13 | public class Main { 14 | public static void main(String[] args) { 15 | Generic notNullValue = new Generic<>(1); 16 | System.out.println(getOrDefault(notNullValue, 2)); 17 | 18 | Generic nullValue = new Generic<>(null); 19 | System.out.println(getOrDefault(nullValue, 2)); 20 | } 21 | 22 | private static T getOrDefault(Generic object, T defaultObject) { 23 | return object.getObject() != null ? object.getObject() : defaultObject; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task1/service/MessageReceivingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task1.service; 2 | 3 | public class MessageReceivingService { 4 | private final MessageHolder messageHolder; 5 | 6 | public MessageReceivingService(MessageHolder messageHolder) { 7 | this.messageHolder = messageHolder; 8 | } 9 | 10 | public String receive() { 11 | try { 12 | messageHolder.getLock().lock(); 13 | 14 | while (messageHolder.isReceived() || messageHolder.getMessage() == null) { 15 | messageHolder.getCondition().await(); 16 | } 17 | 18 | String message = messageHolder.getMessage(); 19 | System.out.printf("Received message: '%s'%n", message); 20 | 21 | messageHolder.setReceived(); 22 | messageHolder.getCondition().signalAll(); 23 | 24 | return message; 25 | } catch (Exception e) { 26 | throw new RuntimeException(e); 27 | } finally { 28 | messageHolder.getLock().unlock(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson19_object_methods/service/CarService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson19_object_methods.service; 2 | 3 | import com.walking.lesson19_object_methods.model.Car; 4 | 5 | public class CarService { 6 | private final Car[] cars; 7 | 8 | public CarService(Car[] cars) { 9 | this.cars = cars; 10 | } 11 | 12 | public Car findCar(Car car) { 13 | // Алгоритм поиска может быть более продвинутым по вашему желанию. 14 | // В рамках задачи для нас главное научиться использованию методов Object, поэтому здесь максимально 15 | // простая реализация алгоритма - перебор неотсортированного массива 16 | for (Car c : cars) { 17 | // Учитывая, что хэшкоды рассчитаны заранее, проверить их быстрее, чем сравнить по equals. 18 | // При этом если хэшкоды не равны - объекты точно не будут равны по equals() исходя из 19 | // контракта equals() и hashcode() 20 | if (c.hashCode() == car.hashCode() && c.equals(car)) { 21 | return c; 22 | } 23 | } 24 | 25 | return null; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task4/CallableThread.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task4; 2 | 3 | import java.util.Objects; 4 | import java.util.concurrent.Callable; 5 | 6 | public class CallableThread { 7 | private final Thread thread; 8 | private R result; 9 | 10 | public CallableThread(Callable callable) { 11 | Objects.requireNonNull(callable); 12 | 13 | this.thread = new Thread(() -> { 14 | try { 15 | this.result = callable.call(); 16 | } catch (Exception e) { 17 | throw new RuntimeException(e); 18 | } 19 | }); 20 | } 21 | 22 | public R startAndGet() throws InterruptedException { 23 | thread.start(); 24 | 25 | return getResult(); 26 | } 27 | 28 | public R getResult() throws InterruptedException { 29 | while (thread.isAlive()) { 30 | //Ничего не делаем. Можно вставить сюда sout, чтобы было нагляднее 31 | } 32 | 33 | return result; 34 | } 35 | 36 | public void start() { 37 | thread.start(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/com/walking/lesson10_static_constants/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson10_static_constants.task2; 2 | 3 | /** 4 | * Для задачи 5 | * ... 6 | * реализуйте неизменность поля названия у класса Counter. 7 | * Ведь очень странно, если мы можем менять название счетчика по ходу выполнения программы, 8 | * не так ли? 9 | */ 10 | public class Main { 11 | public static void main(String[] args) { 12 | Counter evenCounter = new Counter("Четные числа"); 13 | Counter oddCounter = new Counter("Нечетные числа"); 14 | 15 | for (int i = 1; i <= 100; i++) { 16 | if (i % 2 == 0) { 17 | evenCounter.increment(); 18 | } else { 19 | oddCounter.increment(); 20 | } 21 | } 22 | 23 | printCounterValue(evenCounter); 24 | printCounterValue(oddCounter); 25 | } 26 | 27 | static void printCounterValue(Counter counter) { 28 | System.out.printf("%s: %d\n", counter.name, counter.counter); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/com/walking/lesson58_collection_lamda_param/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson58_collection_lamda_param.task2; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Employee; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | /** 11 | * Используя классы из практики к уроку 57, реализуйте метод, 12 | * принимающий на вход список сотрудников и возвращающий список обладателей каждого имени. 13 | */ 14 | public class Main { 15 | public static void main(String[] args) { 16 | var employees = List.of(new Employee()); // some init 17 | 18 | System.out.println(getEmployeesByName(employees)); 19 | } 20 | 21 | private static Map> getEmployeesByName(List employees) { 22 | var employeesByName = new HashMap>(); 23 | 24 | for (Employee e : employees) { 25 | employeesByName.computeIfAbsent(e.getName(), k -> new ArrayList<>()) 26 | .add(e); 27 | } 28 | 29 | return employeesByName; 30 | } 31 | } -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task3/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task3; 2 | 3 | 4 | import com.walking.lesson16_abstract_class_interface.task3.model.Animal; 5 | import com.walking.lesson16_abstract_class_interface.task3.model.Cat; 6 | import com.walking.lesson16_abstract_class_interface.task3.model.Cow; 7 | import com.walking.lesson16_abstract_class_interface.task3.model.Dog; 8 | 9 | /** 10 | * Реализуйте любую задачу из уроков о наследовании или полиморфизме с использованием новых знаний. 11 | * Выбирайте инструмент с умом. 12 | *

13 | * В качестве задачи выбрана 14 | * ... 15 | */ 16 | public class Main { 17 | public static void main(String[] args) { 18 | Animal[] animals = new Animal[]{new Cat(), new Dog(), new Cow()}; 19 | 20 | soundAll(animals); 21 | } 22 | 23 | private static void soundAll(Animal[] animals) { 24 | for (Animal animal : animals) { 25 | animal.sound(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/walking/lesson41_set/task1/service/IteratorBasedTaskService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson41_set.task1.service; 2 | 3 | import com.walking.lesson41_set.task1.model.Task; 4 | 5 | import java.util.Iterator; 6 | import java.util.LinkedHashSet; 7 | import java.util.Set; 8 | 9 | //Решение на основе итератора. Скажу честно: идея не моя, а одного из подписчиков. Но решение очень лаконичное 10 | public class IteratorBasedTaskService implements TaskService { 11 | private final Set tasks = new LinkedHashSet<>(); 12 | 13 | @Override 14 | public Task add(Task task) { 15 | tasks.add(task); 16 | System.out.printf("Task '%s' added!\n", task.getName()); 17 | 18 | return task; 19 | } 20 | 21 | @Override 22 | public void complete() { 23 | Iterator taskIterator = tasks.iterator(); 24 | 25 | if (!taskIterator.hasNext()) { 26 | System.out.println("Tasks' queue is empty!"); 27 | } else { 28 | System.out.printf("Task '%s' completed!\n", taskIterator.next().getName()); 29 | taskIterator.remove(); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task5.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.function.Function; 10 | import java.util.stream.Collectors; 11 | 12 | /** 13 | * Предоставьте самого старшего обладателя каждого из имен. 14 | * Попробуйте сделать это без использования downstream. 15 | */ 16 | public class Task5 implements StatisticTask> { 17 | @Override 18 | public Map calculate(List departments) { 19 | return departments.stream() 20 | .map(Department::getEmployees) 21 | .flatMap(Collection::stream) 22 | .collect(Collectors.toMap( 23 | Employee::getName, 24 | Function.identity(), 25 | (e1, e2) -> e1.getAge() >= e2.getAge() ? e1 : e2)); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /resources/sql/lesson_87_where_clause_operators/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 1 2 | -- Получите всех пассажиров, у которых имя начинается с буквы «I». 3 | select * from passenger where first_name like 'I%'; 4 | 5 | -- Задача 2 6 | -- Получите всех пассажиров, у которых имя содержит букву «I» (в любом регистре). 7 | select * from passenger where first_name ilike '%i%'; 8 | 9 | -- Задача 3 10 | -- Получите всех пассажиров, у которых первым из любимых аэропортов является Minsk, Moscow или Tallinn. 11 | select * from passenger where favorite_airports[1] in ('Minsk', 'Moscow', 'Tallinn'); 12 | 13 | -- Задача 4 14 | -- Найдите всех пассажиров, родившихся в XX веке. 15 | select * from passenger where birth_date between '1901-01-01' and '2000-12-31'; 16 | 17 | -- Задача 5 18 | -- Найдите всех пассажиров, родившихся не в XX веке. 19 | select * from passenger where birth_date not between '1901-01-01' and '2000-12-31'; 20 | 21 | -- Задача 6 22 | -- Найдите всех пассажиров, которые застали Вторую мировую войну (1 сентября 1939 – 2 сентября 1945). 23 | select * from passenger where birth_date <= '1945-09-02'; 24 | -- Да, не особо удачная задача получилась. Хотелось на OVERLAPS -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task3.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.List; 7 | import java.util.Map; 8 | import java.util.Set; 9 | import java.util.stream.Collectors; 10 | 11 | /** 12 | * Предоставьте полный перечень оригинальных имен сотрудников по каждому департаменту. 13 | */ 14 | public class Task3 implements StatisticTask>> { 15 | @Override 16 | public Map> calculate(List departments) { 17 | return departments.stream() 18 | .collect(Collectors.groupingBy( 19 | Department::getName, 20 | Collectors.flatMapping( 21 | department -> department.getEmployees() 22 | .stream() 23 | .map(Employee::getName), 24 | Collectors.toSet()))); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/service/InputValidationService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.service; 2 | 3 | import java.time.LocalDate; 4 | 5 | public class InputValidationService { 6 | private static final String MAIN_MENU_VALIDATION_REGEX = "^[0-4]$"; 7 | private static final String YEAR_VALIDATION_REGEX = "^[0-9]{4}$"; 8 | private static final int MIN_AVAILABLE_YEAR = 1900; 9 | private static final int MAX_AVAILABLE_YEAR = LocalDate.now().getYear(); 10 | 11 | public boolean isMainMenuItemInputValid(String menuItemInput) { 12 | return menuItemInput.matches(MAIN_MENU_VALIDATION_REGEX); 13 | } 14 | 15 | public boolean isMinYearInputValid(String firstYearInput) { 16 | return isMaxYearInputValid(firstYearInput, MIN_AVAILABLE_YEAR); 17 | } 18 | 19 | public boolean isMaxYearInputValid(String firstYearInput, int firstYear) { 20 | if (!firstYearInput.matches(YEAR_VALIDATION_REGEX)) { 21 | return false; 22 | } 23 | 24 | int year = Integer.parseInt(firstYearInput); 25 | return firstYear <= year && year <= MAX_AVAILABLE_YEAR; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task2/model/FullName.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task2.model; 2 | 3 | public class FullName { 4 | private String name; 5 | private String surname; 6 | private String patronymic; 7 | 8 | public FullName() { 9 | } 10 | 11 | public FullName(String name, String surname, String patronymic) { 12 | this.name = name; 13 | this.surname = surname; 14 | this.patronymic = patronymic; 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | } 24 | 25 | public String getSurname() { 26 | return surname; 27 | } 28 | 29 | public void setSurname(String surname) { 30 | this.surname = surname; 31 | } 32 | 33 | public String getPatronymic() { 34 | return patronymic; 35 | } 36 | 37 | public void setPatronymic(String patronymic) { 38 | this.patronymic = patronymic; 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return "%s %s %s".formatted(surname, name, patronymic); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/com/walking/lesson58_collection_lamda_param/task3/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson58_collection_lamda_param.task3; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Employee; 4 | 5 | import java.util.ArrayList; 6 | import java.util.HashMap; 7 | import java.util.List; 8 | import java.util.Map; 9 | 10 | /** 11 | * Используя классы из практики к уроку 57, реализуйте метод, 12 | * принимающий на вход список сотрудников и возвращающий суммарный возраст обладателей каждого имени. 13 | * Не используйте Map.merge() 14 | */ 15 | public class Main { 16 | public static void main(String[] args) { 17 | var employees = List.of(new Employee()); // some init 18 | 19 | System.out.println(getEmployeeAgeSumByName(employees)); 20 | } 21 | 22 | private static Map getEmployeeAgeSumByName(List employees) { 23 | var employeeAgeSumByName = new HashMap(); 24 | 25 | for (Employee e : employees) { 26 | employeeAgeSumByName.compute(e.getName(), (k, v) -> v == null ? e.getAge() : v + e.getAge()); 27 | } 28 | 29 | return employeeAgeSumByName; 30 | } 31 | } -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/service/InputValidationService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.service; 2 | 3 | import java.time.LocalDate; 4 | 5 | public class InputValidationService { 6 | private static final String MAIN_MENU_VALIDATION_REGEX = "^[0-4]$"; 7 | private static final String YEAR_VALIDATION_REGEX = "^[0-9]{4}$"; 8 | private static final int MIN_AVAILABLE_YEAR = 1900; 9 | private static final int MAX_AVAILABLE_YEAR = LocalDate.now().getYear(); 10 | 11 | public boolean isMainMenuItemInputValid(String menuItemInput) { 12 | return menuItemInput.matches(MAIN_MENU_VALIDATION_REGEX); 13 | } 14 | 15 | public boolean isMinYearInputValid(String firstYearInput) { 16 | return isMaxYearInputValid(firstYearInput, MIN_AVAILABLE_YEAR); 17 | } 18 | 19 | public boolean isMaxYearInputValid(String firstYearInput, int firstYear) { 20 | if (!firstYearInput.matches(YEAR_VALIDATION_REGEX)) { 21 | return false; 22 | } 23 | 24 | int year = Integer.parseInt(firstYearInput); 25 | return firstYear <= year && year <= MAX_AVAILABLE_YEAR; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/walking/lesson5_arrays/Task2.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson5_arrays; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Создать массив int’ов из 5 элементов. 7 | * Заполнить его значениями, введенными с клавиатуры. 8 | * Вывести на экран сумму каждого значения с предыдущим. 9 | * Предыдущим значением для 0го элемента считать последнее значение массива. 10 | */ 11 | public class Task2 { 12 | public static void main(String[] args) { 13 | int[] array = new int[5]; 14 | 15 | Scanner scanner = new Scanner(System.in); 16 | 17 | for (int i = 0; i < array.length; i++) { 18 | array[i] = scanner.nextInt(); 19 | } 20 | 21 | scanner.close(); 22 | 23 | for (int i = 0; i < array.length; i++) { 24 | int result; 25 | 26 | if (i == 0) { 27 | // Складываем 0й элемент с последним 28 | result = array[i] + array[array.length - 1]; 29 | } else { 30 | // Складываем текущий элемент с предыдущим 31 | result = array[i] + array[i - 1]; 32 | } 33 | 34 | System.out.println(result); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/com/walking/lesson62_wait_notify/task1/service/MessageSendingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson62_wait_notify.task1.service; 2 | 3 | public class MessageSendingService { 4 | private final MessageHolder messageHolder; 5 | 6 | public MessageSendingService(MessageHolder messageHolder) { 7 | this.messageHolder = messageHolder; 8 | } 9 | 10 | // Чтобы не возникало ситуаций, когда поток пытается начать логику отправки нового сообщения 11 | // (например, запрашивает его с клавиатуры) до того, как прочитано старое 12 | public boolean isSendingReady() { 13 | return messageHolder.isReceived() || messageHolder.getMessage() == null; 14 | } 15 | 16 | public void send(String message) { 17 | synchronized (messageHolder) { 18 | while (!messageHolder.isReceived()) { 19 | try { 20 | messageHolder.wait(); 21 | } catch (InterruptedException e) { 22 | throw new RuntimeException(e); 23 | } 24 | } 25 | 26 | messageHolder.setMessage(message); 27 | messageHolder.notifyAll(); 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson68_semaphore/task1/model/Philosopher.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson68_semaphore.task1.model; 2 | 3 | import java.util.concurrent.locks.Lock; 4 | 5 | public class Philosopher { 6 | private final String name; 7 | // Вилка будет выступать локом. В целом, подошел бы и AtomicBoolean или отдельный класс, 8 | // но это потребовало бы описывать логику взятия вилки/опроса доступности вилки 9 | private final Lock leftFork; 10 | private final Lock rightFork; 11 | 12 | private int eatenCounter; 13 | 14 | public Philosopher(String name, Lock leftFork, Lock rightFork) { 15 | this.name = name; 16 | this.leftFork = leftFork; 17 | this.rightFork = rightFork; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public Lock getLeftFork() { 25 | return leftFork; 26 | } 27 | 28 | public Lock getRightFork() { 29 | return rightFork; 30 | } 31 | 32 | public int getEatenCounter() { 33 | return eatenCounter; 34 | } 35 | 36 | public void setEatenCounter(int eatenCounter) { 37 | this.eatenCounter = eatenCounter; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/com/walking/lesson13_inheritance/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson13_inheritance.task1; 2 | 3 | import com.walking.lesson13_inheritance.task1.model.Cat; 4 | import com.walking.lesson13_inheritance.task1.model.Dog; 5 | 6 | /** 7 | * Реализовать класс Animal, содержащий protected-конструктор без параметров, 8 | * который выводит в консоль сообщение «I’m an animal». 9 | *

10 | * Реализовать для Animal классы-наследники Dog и Cat. 11 | * Реализовать для каждого из них приватный конструктор без параметров, 12 | * который выводит в консоль сообщение «I’m a dog» («I’m a cat»). 13 | * Также реализовать публичный конструктор, принимающий строковый параметр color. 14 | * Он должен вызывать конструктор без параметров, 15 | * а также выводить в консоль сообщение «I’m a dog» («I’m a cat»), 16 | * где – значение параметра конструктора color. 17 | *

18 | * Создайте в main() экземпляр Dog и экземпляр Cat. 19 | * Обратите внимание на консоль. 20 | * Такой ли порядок сообщений вы ожидали увидеть? 21 | */ 22 | public class Main { 23 | public static void main(String[] args) { 24 | new Dog("black"); 25 | new Cat("white"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task2_1/service/ArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task2_1.service; 2 | 3 | import java.util.Arrays; 4 | 5 | public class ArrayFillingService { 6 | private final IntRandomGenerator randomGenerator; 7 | 8 | public ArrayFillingService(IntRandomGenerator randomGenerator) { 9 | this.randomGenerator = randomGenerator; 10 | } 11 | 12 | public int[][] fill(int[][] array) { 13 | Arrays.stream(array) 14 | .map(this::getFillingTask) 15 | .map(Thread::new) 16 | .peek(Thread::start) 17 | .forEach(this::joinThreadNoEx); 18 | 19 | return array; 20 | } 21 | 22 | private Runnable getFillingTask(int[] array) { 23 | return () -> { 24 | for (int i = 0; i < array.length; i++) { 25 | array[i] = randomGenerator.generate(); 26 | } 27 | }; 28 | } 29 | 30 | private void joinThreadNoEx(Thread thread) { 31 | try { 32 | thread.join(); 33 | } catch (InterruptedException e) { 34 | throw new RuntimeException(e); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task2_2/service/ArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task2_2.service; 2 | 3 | import java.util.Arrays; 4 | 5 | public class ArrayFillingService { 6 | private final IntRandomGenerator randomGenerator; 7 | 8 | public ArrayFillingService(IntRandomGenerator randomGenerator) { 9 | this.randomGenerator = randomGenerator; 10 | } 11 | 12 | public int[][] fill(int[][] array) { 13 | Arrays.stream(array) 14 | .map(this::getFillingTask) 15 | .map(Thread::new) 16 | .peek(Thread::start) 17 | .forEach(this::joinThreadNoEx); 18 | 19 | return array; 20 | } 21 | 22 | private Runnable getFillingTask(int[] array) { 23 | return () -> { 24 | for (int i = 0; i < array.length; i++) { 25 | array[i] = randomGenerator.generate(); 26 | } 27 | }; 28 | } 29 | 30 | private void joinThreadNoEx(Thread thread) { 31 | try { 32 | thread.join(); 33 | } catch (InterruptedException e) { 34 | throw new RuntimeException(e); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task2_3/service/ArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task2_3.service; 2 | 3 | import java.util.Arrays; 4 | 5 | public class ArrayFillingService { 6 | private final IntRandomGenerator randomGenerator; 7 | 8 | public ArrayFillingService(IntRandomGenerator randomGenerator) { 9 | this.randomGenerator = randomGenerator; 10 | } 11 | 12 | public int[][] fill(int[][] array) { 13 | Arrays.stream(array) 14 | .map(this::getFillingTask) 15 | .map(Thread::new) 16 | .peek(Thread::start) 17 | .forEach(this::joinThreadNoEx); 18 | 19 | return array; 20 | } 21 | 22 | private Runnable getFillingTask(int[] array) { 23 | return () -> { 24 | for (int i = 0; i < array.length; i++) { 25 | array[i] = randomGenerator.generate(); 26 | } 27 | }; 28 | } 29 | 30 | private void joinThreadNoEx(Thread thread) { 31 | try { 32 | thread.join(); 33 | } catch (InterruptedException e) { 34 | throw new RuntimeException(e); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/com/walking/lesson14_polymorphism/task2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson14_polymorphism.task2; 2 | 3 | import com.walking.lesson14_polymorphism.task2.model.Animal; 4 | import com.walking.lesson14_polymorphism.task2.model.Cat; 5 | import com.walking.lesson14_polymorphism.task2.model.Cow; 6 | import com.walking.lesson14_polymorphism.task2.model.Dog; 7 | 8 | /** 9 | * Используя новые знания, упростите реализацию задачи 2 из предыдущего урока: 10 | * ... 11 | * Допустимо использовать метод sound() вместо woof(), meow() и moo(). 12 | * Метод sound() допустимо сделать публичным. 13 | *

14 | * Использовать отдельное поле для хранения выводимой строки — недопустимо:) 15 | */ 16 | public class Main { 17 | public static void main(String[] args) { 18 | Animal[] animals = new Animal[]{new Cat(), new Dog(), new Cow()}; 19 | 20 | soundAll(animals); 21 | } 22 | 23 | private static void soundAll(Animal[] animals) { 24 | for (Animal animal : animals) { 25 | animal.sound(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task2ComplicatedWithString.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * Усложнение для внимательных: вывести ваше имя посимвольно, 5 | * где каждая буква — на новой строке, не используя System.out.println(). 6 | * Реализуется с использованием String. 7 | */ 8 | public class Task2ComplicatedWithString { 9 | public static void main(String[] args) { 10 | /* 11 | * Объявляем переменную типа String и инициализируем ее своим именем. 12 | * После каждой буквы имени указываем управляющий символ \n, 13 | * который переводит курсор на новую строку 14 | * */ 15 | String s = "Е\nг\nо\nр"; 16 | // Выводим в консоль значение переменной s 17 | System.out.print(s); 18 | } 19 | 20 | /* 21 | * Примечание: если вы установили Java 15 или выше, вам доступен функционал текстовых блоков. 22 | * Они упрощают решение и позволяют его свести к 23 | * 24 | * String s = """ 25 | * Е 26 | * г 27 | * о 28 | * р"""; 29 | * 30 | * System.out.print(s); 31 | * 32 | * Данное решение тоже допустимо 33 | * */ 34 | } 35 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/model/Department.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.model; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Department { 7 | private String name; 8 | private int vacancyAmount; 9 | private List employees = new ArrayList<>(); 10 | 11 | public Department() { 12 | } 13 | 14 | public Department(String name, int vacancyAmount, List employees) { 15 | this.name = name; 16 | this.vacancyAmount = vacancyAmount; 17 | this.employees = employees; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public void setName(String name) { 25 | this.name = name; 26 | } 27 | 28 | public int getVacancyAmount() { 29 | return vacancyAmount; 30 | } 31 | 32 | public void setVacancyAmount(int vacancyAmount) { 33 | this.vacancyAmount = vacancyAmount; 34 | } 35 | 36 | public List getEmployees() { 37 | return employees; 38 | } 39 | 40 | public void setEmployees(List employees) { 41 | this.employees = employees; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/com/walking/lesson67_locks/task1/service/MessageSendingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson67_locks.task1.service; 2 | 3 | public class MessageSendingService { 4 | private final MessageHolder messageHolder; 5 | 6 | public MessageSendingService(MessageHolder messageHolder) { 7 | this.messageHolder = messageHolder; 8 | } 9 | 10 | // Чтобы не возникало ситуаций, когда поток пытается начать логику отправки нового сообщения 11 | // (например, запрашивает его с клавиатуры) до того, как прочитано старое 12 | public boolean isSendingReady() { 13 | return messageHolder.isReceived() || messageHolder.getMessage() == null; 14 | } 15 | 16 | public void send(String message) { 17 | try { 18 | messageHolder.getLock().lock(); 19 | 20 | while (!messageHolder.isReceived()) { 21 | messageHolder.getCondition().await(); 22 | } 23 | 24 | messageHolder.setMessage(message); 25 | messageHolder.getCondition().signalAll(); 26 | } catch (Exception e) { 27 | throw new RuntimeException(e); 28 | } finally { 29 | messageHolder.getLock().unlock(); 30 | } 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /resources/sql/lesson_101_pk_fk/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 2 | -- Для таблиц, созданных в рамках практики к Уроку 99 добавьте PK и FK. 3 | -- Также добавьте их для остальных таблиц в рамках тестовой БД. 4 | -- Включая passenger и ticket. 5 | 6 | -- Для не пустых таблиц может потребоваться очистка данных с дублирующимися id 7 | alter table passenger add primary key (id); 8 | alter table ticket add primary key (id); 9 | alter table airport add primary key (id); 10 | alter table flight add primary key (id); 11 | alter table "user" add primary key (id); 12 | alter table passenger_favorite_airport add primary key (passenger_id, airport_id); 13 | 14 | 15 | alter table ticket add foreign key (passenger_id) references passenger(id); 16 | 17 | alter table passenger_favorite_airport 18 | add foreign key (passenger_id) references passenger(id), 19 | add foreign key (airport_id) references airport(id); 20 | 21 | alter table flight 22 | add foreign key (departure_airport_id) references airport(id), 23 | add foreign key (arrival_airport_id) references airport(id); 24 | -------------------------------------------------------------------------------- /src/com/walking/lesson52_stream_creation/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson52_stream_creation.task1; 2 | 3 | import java.util.Scanner; 4 | import java.util.stream.Stream; 5 | 6 | /** 7 | * Реализуйте задачу 5.1 из урока 4: 8 | * ... 9 | * используя Stream API. 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | Scanner scanner = new Scanner(System.in); 14 | 15 | // Также можно сделать через стрим на основании System.in (см. реализацию в lesson51_iterator_spliterator). 16 | // Но тогда условие в takeWhile следует заменить на str - > !"1".equals(str). 17 | // Обратите внимание, что стрим на базе System.in в любой из предложенных реализаций параметризован типом String 18 | // (и итератор в Scanner, и lines() в BufferedReader работают со строковыми данными) 19 | Stream.generate(scanner::nextInt) 20 | .takeWhile(i -> i != 1) // до тех пор, пока введенное число != 1 21 | .forEach(it -> System.out.println("Не угадал!")); // выводить в консоль "Не угадал!" 22 | 23 | scanner.close(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /resources/sql/lesson_105_index/tasks.sql: -------------------------------------------------------------------------------- 1 | -- Задача 2 | -- Проанализируйте SELECT-запросы, представленные в практике к предыдущим урокам. 3 | -- Добавьте индексы на колонки, которые наиболее часто использовались для фильтрации и сортировки данных. 4 | -- Везде ли типом индекса стоит выбрать BTREE? Требуются ли составные индексы в рамках этой задачи? 5 | 6 | -- На примере таблицы passenger. Наиболее популярны (исходя из выыполненных задач) фильтры по: 7 | -- дате рождения с использованием операторов сравнения; 8 | -- имени с использованием = и like/ilike; 9 | -- полу (по значению). 10 | -- Исходя из этого добавим индексы: 11 | create index i_passenger_birth_date on passenger (birth_date); 12 | -- Учитывая фильтры по like, имело бы смысл добавить, например, gist/gin-индекс с использованием триграмм: 13 | -- create index i_passenger_first_name_trgm on passenger using gin(lower(first_name) gin_trgm_ops); 14 | -- Но для использования gin_trgm_ops необходимо подключать внешнее расширение (extension) к pg, 15 | -- поэтому обойдемся вариантом попроще: 16 | create index i_passenger_first_name_trgm on passenger (first_name); 17 | create index i_passenger_male on passenger using hash (male); 18 | -------------------------------------------------------------------------------- /src/com/walking/lesson46_lambda/task3/service/MenuMappingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson46_lambda.task3.service; 2 | 3 | import com.walking.lesson46_lambda.task3.domain.MainMenuItem; 4 | 5 | public class MenuMappingService { 6 | private final InputValidationService inputValidationService; 7 | 8 | public MenuMappingService(InputValidationService inputValidationService) { 9 | this.inputValidationService = inputValidationService; 10 | } 11 | 12 | public MainMenuItem mapMainMenuItem(String menuItemInput) { 13 | if (!inputValidationService.isMainMenuItemInputValid(menuItemInput)) { 14 | return MainMenuItem.INCORRECT_CHOICE; 15 | } 16 | // Да, современный switch-case умеет возвращать значение 17 | return switch (Integer.parseInt(menuItemInput)) { 18 | case 0 -> MainMenuItem.EXIT; 19 | case 1 -> MainMenuItem.SEARCH_BY_NUMBER; 20 | case 2 -> MainMenuItem.SEARCH_BY_NUMBER_SUBSTRING; 21 | case 3 -> MainMenuItem.SEARCH_BY_COLOR; 22 | case 4 -> MainMenuItem.SEARCH_BY_YEAR_BETWEEN; 23 | default -> throw new RuntimeException("Unknown main menu item input: %s".formatted(menuItemInput)); 24 | }; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task2/static_class/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task2.static_class; 2 | 3 | /** 4 | * Реализуйте задачу 5 | * ... 6 | * используя статические вложенные классы. 7 | */ 8 | public class Main { 9 | public static void main(String[] args) { 10 | Animal[] animals = new Animal[]{new Cat(), new Dog(), new Cow()}; 11 | 12 | soundAll(animals); 13 | } 14 | 15 | private static void soundAll(Animal[] animals) { 16 | for (Animal animal : animals) { 17 | animal.sound(); 18 | } 19 | } 20 | 21 | private static class Cat extends Animal { 22 | @Override 23 | public void sound() { 24 | System.out.println("meow"); 25 | } 26 | } 27 | 28 | private static class Dog extends Animal { 29 | @Override 30 | public void sound() { 31 | System.out.println("woof"); 32 | } 33 | } 34 | 35 | private static class Cow extends Animal { 36 | @Override 37 | public void sound() { 38 | System.out.println("moo"); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/com/walking/lesson60_thread/task2/service/ThreadByRowArrayFillingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson60_thread.task2.service; 2 | 3 | import java.util.Arrays; 4 | 5 | public class ThreadByRowArrayFillingService implements ArrayFillingService { 6 | private final IntRandomGenerator randomGenerator; 7 | 8 | public ThreadByRowArrayFillingService(IntRandomGenerator randomGenerator) { 9 | this.randomGenerator = randomGenerator; 10 | } 11 | 12 | @Override 13 | public int[][] fill(int[][] array) { 14 | Arrays.stream(array) 15 | .map(this::getFillingTask) 16 | .map(Thread::new) 17 | .peek(Thread::start) 18 | .forEach(this::joinThreadNoEx); 19 | 20 | return array; 21 | } 22 | 23 | private Runnable getFillingTask(int[] array) { 24 | return () -> { 25 | for (int i = 0; i < array.length; i++) { 26 | array[i] = randomGenerator.generate(); 27 | } 28 | }; 29 | } 30 | 31 | private void joinThreadNoEx(Thread thread) { 32 | try { 33 | thread.join(); 34 | } catch (InterruptedException e) { 35 | throw new RuntimeException(e); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/service/JoinerService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.service; 2 | 3 | import com.walking.lesson30_regex.task4.joiner.AbstractJoiner; 4 | import com.walking.lesson30_regex.task4.joiner.ParagraphJoiner; 5 | import com.walking.lesson30_regex.task4.joiner.SentenceJoiner; 6 | import com.walking.lesson30_regex.task4.joiner.TextJoiner; 7 | import com.walking.lesson30_regex.task4.model.TextElement; 8 | 9 | public class JoinerService { 10 | private final AbstractJoiner[] joiners; 11 | 12 | public JoinerService() { 13 | this.joiners = new AbstractJoiner[]{new TextJoiner(), new ParagraphJoiner(), new SentenceJoiner()}; 14 | } 15 | 16 | public String joinText(TextElement textElement) { 17 | return joinText(textElement, 0); 18 | } 19 | 20 | private String joinText(TextElement textElement, int joinerIndex) { 21 | if (joinerIndex != joiners.length - 1) { 22 | for (TextElement child : textElement.getChildren()) { 23 | joinText(child, joinerIndex + 1); 24 | } 25 | } 26 | 27 | textElement.setJoinedElement(joiners[joinerIndex].join(textElement.getChildren())); 28 | 29 | return textElement.getJoinedElement(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson49_optional/task2/service/SearchHabitationService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson49_optional.task2.service; 2 | 3 | import com.walking.lesson49_optional.task2.model.Habitation; 4 | import com.walking.lesson49_optional.task2.model.Human; 5 | import com.walking.lesson49_optional.task2.model.OccupationType; 6 | import com.walking.lesson49_optional.task2.model.car.Car; 7 | 8 | import java.util.Collection; 9 | import java.util.Optional; 10 | import java.util.function.Predicate; 11 | 12 | public class SearchHabitationService { 13 | public Optional getByCar(Car car) { 14 | return Optional.ofNullable(car) 15 | .filter(c -> c.getIdentifier().getYear() <= 2021) 16 | .map(Car::getOwner) 17 | .filter(father -> father.getOccupationType() != OccupationType.POLICEMAN) 18 | .map(Human::getChildren) 19 | .filter(Predicate.not(Collection::isEmpty)) 20 | .map(children -> children.get(0)) 21 | .filter(child -> child.getOccupationType() != OccupationType.POLICEMAN) 22 | .map(Human::getHabitation) 23 | .filter(habitation -> !habitation.getAddress().toLowerCase().contains("рублевское шоссе")); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task2/model/EquilateralTriangle.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task2.model; 2 | 3 | public class EquilateralTriangle extends EquilateralShape { 4 | public static final String TRIANGLE_HORIZONTAL_SIDE_ELEMENT = "--"; 5 | public static final String TRIANGLE_LEFT_SIDE_ELEMENT = "/"; 6 | public static final String TRIANGLE_RIGHT_SIDE_ELEMENT = "\\"; 7 | 8 | public EquilateralTriangle(int length) { 9 | super(length); 10 | } 11 | 12 | @Override 13 | public String createShapeString() { 14 | String triangle = EMPTY_STRING; 15 | 16 | for (int i = 0; i < length; i++) { 17 | for (int j = 0; j < length - i; j++) { 18 | triangle += EMPTY_ELEMENT; 19 | } 20 | 21 | triangle += TRIANGLE_LEFT_SIDE_ELEMENT; 22 | 23 | for (int j = 0; j < i * 2; j++) { 24 | triangle += EMPTY_ELEMENT; 25 | } 26 | 27 | triangle += TRIANGLE_RIGHT_SIDE_ELEMENT + NEW_LINE_SYMBOL; 28 | } 29 | 30 | triangle += " "; 31 | 32 | for (int i = 0; i < length; i++) { 33 | triangle += TRIANGLE_HORIZONTAL_SIDE_ELEMENT; 34 | } 35 | 36 | return triangle; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/com/walking/lesson25_nested_classes/task2/inner_class/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson25_nested_classes.task2.inner_class; 2 | 3 | /** 4 | * Реализуйте задачу 5 | * ... 6 | * используя внутренние классы. 7 | */ 8 | public class Main { 9 | public static void main(String[] args) { 10 | Main main = new Main(); 11 | Animal[] animals = new Animal[]{main.new Cat(), main.new Dog(), main.new Cow()}; 12 | 13 | soundAll(animals); 14 | } 15 | 16 | private static void soundAll(Animal[] animals) { 17 | for (Animal animal : animals) { 18 | animal.sound(); 19 | } 20 | } 21 | 22 | private class Cat extends Animal { 23 | @Override 24 | public void sound() { 25 | System.out.println("meow"); 26 | } 27 | } 28 | 29 | private class Dog extends Animal { 30 | @Override 31 | public void sound() { 32 | System.out.println("woof"); 33 | } 34 | } 35 | 36 | private class Cow extends Animal { 37 | @Override 38 | public void sound() { 39 | System.out.println("moo"); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/com/walking/lesson52_stream_creation/task2_iterate/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson52_stream_creation.task2_iterate; 2 | 3 | import java.time.LocalDate; 4 | import java.time.format.DateTimeFormatter; 5 | import java.util.stream.Stream; 6 | 7 | /** 8 | * Реализуйте программу, выводящую в консоль все даты текущего месяца. 9 | * Не используйте Stream.limit() 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | LocalDate startDate = LocalDate.now().withDayOfMonth(1); 14 | DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 15 | 16 | Stream.iterate(startDate, 17 | date -> date.isBefore(startDate.plusMonths(1)), 18 | date -> date.plusDays(1)) 19 | .map(date -> date.format(formatter)) 20 | .forEach(System.out::println); 21 | 22 | // Вариант с использованием IntStream 23 | // int monthDaysAmount = startDate.getMonth().length(currentDate.isLeapYear()); 24 | // 25 | // IntStream.rangeClosed(1, monthDaysAmount) 26 | // .mapToObj(currentDate::withDayOfMonth) 27 | // .map(date -> date.format(formatter)) 28 | // .forEach(System.out::println); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/com/walking/lesson47_method_reference/task3/service/MenuMappingService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson47_method_reference.task3.service; 2 | 3 | import com.walking.lesson47_method_reference.task3.domain.MainMenuItem; 4 | 5 | public class MenuMappingService { 6 | private final InputValidationService inputValidationService; 7 | 8 | public MenuMappingService(InputValidationService inputValidationService) { 9 | this.inputValidationService = inputValidationService; 10 | } 11 | 12 | public MainMenuItem mapMainMenuItem(String menuItemInput) { 13 | if (!inputValidationService.isMainMenuItemInputValid(menuItemInput)) { 14 | return MainMenuItem.INCORRECT_CHOICE; 15 | } 16 | // Да, современный switch-case умеет возвращать значение 17 | return switch (Integer.parseInt(menuItemInput)) { 18 | case 0 -> MainMenuItem.EXIT; 19 | case 1 -> MainMenuItem.SEARCH_BY_NUMBER; 20 | case 2 -> MainMenuItem.SEARCH_BY_NUMBER_SUBSTRING; 21 | case 3 -> MainMenuItem.SEARCH_BY_COLOR; 22 | case 4 -> MainMenuItem.SEARCH_BY_YEAR_BETWEEN; 23 | default -> throw new RuntimeException("Unknown main menu item input: %s".formatted(menuItemInput)); 24 | }; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task1_catchException/model/File.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task1_catchException.model; 2 | 3 | public class File { 4 | private String name; 5 | private long size; 6 | private MediaType mediaType; 7 | 8 | public File() { 9 | } 10 | 11 | public File(String name, long size, MediaType mediaType) { 12 | this.name = name; 13 | this.size = size; 14 | this.mediaType = mediaType; 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | } 24 | 25 | public long getSize() { 26 | return size; 27 | } 28 | 29 | public void setSize(long size) { 30 | this.size = size; 31 | } 32 | 33 | public MediaType getMediaType() { 34 | return mediaType; 35 | } 36 | 37 | public void setMediaType(MediaType mediaType) { 38 | this.mediaType = mediaType; 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return """ 44 | name: %s 45 | size: %d 46 | mediaType: %s 47 | """.formatted( 48 | name, size, mediaType.name()); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/com/walking/lesson20_exceptions/task1_throwsException/model/File.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson20_exceptions.task1_throwsException.model; 2 | 3 | public class File { 4 | private String name; 5 | private long size; 6 | private MediaType mediaType; 7 | 8 | public File() { 9 | } 10 | 11 | public File(String name, long size, MediaType mediaType) { 12 | this.name = name; 13 | this.size = size; 14 | this.mediaType = mediaType; 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | } 24 | 25 | public long getSize() { 26 | return size; 27 | } 28 | 29 | public void setSize(long size) { 30 | this.size = size; 31 | } 32 | 33 | public MediaType getMediaType() { 34 | return mediaType; 35 | } 36 | 37 | public void setMediaType(MediaType mediaType) { 38 | this.mediaType = mediaType; 39 | } 40 | 41 | @Override 42 | public String toString() { 43 | return """ 44 | name: %s 45 | size: %d 46 | mediaType: %s 47 | """.formatted( 48 | name, size, mediaType.name()); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/com/walking/lesson39_queue1/task3/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson39_queue1.task3; 2 | 3 | import com.walking.lesson39_queue1.collection.DoublyLinkedList; 4 | import com.walking.lesson39_queue1.util.CollectionUtils; 5 | 6 | /** 7 | * Реализуйте двусвязный список. 8 | * Реализуйте метод, разворачивающий список. 9 | * Также реализуйте метод, удаляющий все узлы, хэшкод элемента которых - четный. 10 | */ 11 | public class Main { 12 | public static void main(String[] args) { 13 | DoublyLinkedList list = new DoublyLinkedList<>(); 14 | list.addLast(1); 15 | list.addLast(2); 16 | list.addTop(3); 17 | list.addLast(4); 18 | list.addTop(5); 19 | list.addTop(6); 20 | list.addTop(7); 21 | 22 | System.out.printf("first: %d; last: %d\n", list.getTop(), list.getLast()); 23 | list.reverse(); 24 | System.out.printf("first: %d; last: %d\n", list.getTop(), list.getLast()); 25 | 26 | list.removeLast(); 27 | list.removeTop(); 28 | System.out.printf("first: %d; last: %d\n", list.getTop(), list.getLast()); 29 | 30 | System.out.println(list.size()); 31 | CollectionUtils.dropEvenHashCodeElements(list); 32 | System.out.println(list.size()); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/com/walking/lesson6_methods/Task2.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson6_methods; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Декомпозировать задачу 7 | * ... 8 | * Вынести в отдельный метод логику, которая отрабатывает, 9 | * когда первое число кратно и двум, и трем. 10 | */ 11 | public class Task2 { 12 | public static void main(String[] args) { 13 | Scanner scanner = new Scanner(System.in); 14 | 15 | System.out.print("Enter a: "); 16 | int a = scanner.nextInt(); 17 | 18 | System.out.print("Enter b: "); 19 | int b = scanner.nextInt(); 20 | 21 | scanner.close(); 22 | 23 | if (a % 2 == 0 || b % 3 == 0) { 24 | System.out.println(a == b); 25 | } 26 | 27 | if (a % 2 == 0 && a % 3 == 0) { 28 | processSixMultiple(a, b); 29 | } 30 | } 31 | 32 | static void processSixMultiple(int a, int b) { 33 | double result = Math.pow(a, b); 34 | 35 | if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { 36 | System.out.println("Результат выражения слишком большой!"); 37 | } else { 38 | System.out.println((int) result); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/com/walking/lesson73_barrier/task1/model/Friend.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson73_barrier.task1.model; 2 | 3 | import java.util.concurrent.BrokenBarrierException; 4 | import java.util.concurrent.CyclicBarrier; 5 | import java.util.concurrent.TimeUnit; 6 | import java.util.concurrent.TimeoutException; 7 | 8 | public class Friend implements Runnable { 9 | private final int patience; 10 | private final int delay; 11 | private final CyclicBarrier barrier; 12 | 13 | public Friend(int patience, int delay, CyclicBarrier barrier) { 14 | this.patience = patience; 15 | this.delay = delay; 16 | this.barrier = barrier; 17 | } 18 | 19 | @Override 20 | public void run() { 21 | try { 22 | // Обертка над Thread.sleep() 23 | TimeUnit.SECONDS.sleep(delay); 24 | 25 | barrier.await(patience, TimeUnit.SECONDS); 26 | } catch (InterruptedException | BrokenBarrierException | TimeoutException e) { 27 | Thread.currentThread().interrupt(); 28 | } 29 | } 30 | 31 | public int getPatience() { 32 | return patience; 33 | } 34 | 35 | public int getDelay() { 36 | return delay; 37 | } 38 | 39 | public CyclicBarrier getBarrier() { 40 | return barrier; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/com/walking/lesson40_queue2/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson40_queue2; 2 | 3 | import com.walking.lesson40_queue2.model.Task; 4 | import com.walking.lesson40_queue2.service.TaskService; 5 | 6 | /** 7 | * Реализуйте класс Задание. Он должен содержать поле Название, 8 | * состав остальных полей - на ваше усмотрение. 9 | *

10 | * Реализуйте сервис, хранящий задания. 11 | * Он должен иметь методы для добавления заданий и их "выполнения". 12 | * Задания должны обрабатываться в порядке очереди. 13 | * Критерием выполнения задания будем считать выведение в консоль фразы 14 | * "Задание %название задания% выполнено!". 15 | *

16 | * Также добавьте вывод сообщения в консоль о том, 17 | * что задание (с указанием названия) добавлено. 18 | */ 19 | public class Main { 20 | public static void main(String[] args) { 21 | TaskService taskService = new TaskService(); 22 | 23 | taskService.add(new Task("1")); 24 | taskService.add(new Task("2")); 25 | taskService.add(new Task("3")); 26 | 27 | taskService.complete(); 28 | taskService.complete(); 29 | 30 | taskService.add(new Task("4")); 31 | 32 | taskService.complete(); 33 | taskService.complete(); 34 | 35 | taskService.complete(); 36 | taskService.complete(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/com/walking/lesson41_set/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson41_set.task1; 2 | 3 | import com.walking.lesson41_set.task1.model.Task; 4 | import com.walking.lesson41_set.task1.service.IteratorBasedTaskService; 5 | import com.walking.lesson41_set.task1.service.TaskService; 6 | 7 | /** 8 | * Реализуйте задачу 9 | * ..., 10 | * используя Set, вместо Queue. 11 | * Продумайте, как можно эффективно реализовать задачу, 12 | * чтобы сохранить принцип FIFO при обработке заданий. 13 | */ 14 | public class Main { 15 | public static void main(String[] args) { 16 | TaskService taskService = new IteratorBasedTaskService(); 17 | // TaskService taskService = new CreatedFieldBasedTaskService(); 18 | // TaskService taskService = new StaticFieldBasedTaskService(); 19 | 20 | taskService.add(new Task("1")); 21 | taskService.add(new Task("2")); 22 | taskService.add(new Task("3")); 23 | 24 | taskService.complete(); 25 | taskService.complete(); 26 | 27 | taskService.add(new Task("4")); 28 | 29 | taskService.complete(); 30 | taskService.complete(); 31 | 32 | taskService.complete(); 33 | taskService.complete(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/walking/lesson16_abstract_class_interface/task1_abstract_class/model/EquilateralTriangle.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson16_abstract_class_interface.task1_abstract_class.model; 2 | 3 | public class EquilateralTriangle extends EquilateralShape { 4 | public static final String TRIANGLE_HORIZONTAL_SIDE_ELEMENT = "--"; 5 | public static final String TRIANGLE_LEFT_SIDE_ELEMENT = "/"; 6 | public static final String TRIANGLE_RIGHT_SIDE_ELEMENT = "\\"; 7 | 8 | public EquilateralTriangle(int length) { 9 | super(length); 10 | } 11 | 12 | @Override 13 | public String createShapeString() { 14 | String triangle = EMPTY_STRING; 15 | 16 | for (int i = 0; i < length; i++) { 17 | for (int j = 0; j < length - i; j++) { 18 | triangle += EMPTY_ELEMENT; 19 | } 20 | 21 | triangle += TRIANGLE_LEFT_SIDE_ELEMENT; 22 | 23 | for (int j = 0; j < i * 2; j++) { 24 | triangle += EMPTY_ELEMENT; 25 | } 26 | 27 | triangle += TRIANGLE_RIGHT_SIDE_ELEMENT + NEW_LINE_SYMBOL; 28 | } 29 | 30 | triangle += " "; 31 | 32 | for (int i = 0; i < length; i++) { 33 | triangle += TRIANGLE_HORIZONTAL_SIDE_ELEMENT; 34 | } 35 | 36 | return triangle; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/com/walking/lesson65_atomics/task1/service/CounterStorageService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson65_atomics.task1.service; 2 | 3 | import com.walking.lesson65_atomics.task1.model.Counter; 4 | 5 | import java.util.HashMap; 6 | import java.util.HashSet; 7 | import java.util.Map; 8 | import java.util.Set; 9 | 10 | public class CounterStorageService { 11 | private final Map counterByName = new HashMap<>(); 12 | 13 | public synchronized Counter add(Counter counter) { 14 | return counterByName.compute(counter.getName(), (c1, c2) -> { 15 | if (c1 != null) { 16 | throw new RuntimeException("Counter already exists, name: '%s'".formatted(counter.getName())); 17 | } 18 | 19 | return c2; 20 | }); 21 | } 22 | 23 | public synchronized void delete(String name) { 24 | counterByName.remove(name); 25 | } 26 | 27 | public synchronized Set getAll() { 28 | return new HashSet<>(counterByName.values()); 29 | } 30 | 31 | public synchronized Counter get(String name) { 32 | var counter = counterByName.get(name); 33 | 34 | if (counter == null) { 35 | throw new RuntimeException("Counter not found, name: '%s'".formatted(name)); 36 | } 37 | 38 | return counter; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/com/walking/lesson68_semaphore/task2/model/Philosopher.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson68_semaphore.task2.model; 2 | 3 | import java.util.concurrent.atomic.AtomicBoolean; 4 | 5 | public class Philosopher { 6 | private final Integer number; 7 | private final AtomicBoolean eating; 8 | private final AtomicBoolean leftForkOccupied; 9 | private final AtomicBoolean rightForkOccupied; 10 | 11 | private int eatenCounter; 12 | 13 | public Philosopher(Integer number, AtomicBoolean leftForkOccupied, AtomicBoolean rightForkOccupied) { 14 | this.number = number; 15 | this.eating = new AtomicBoolean(); 16 | this.leftForkOccupied = leftForkOccupied; 17 | this.rightForkOccupied = rightForkOccupied; 18 | } 19 | 20 | public Integer getNumber() { 21 | return number; 22 | } 23 | 24 | public AtomicBoolean getEating() { 25 | return eating; 26 | } 27 | 28 | public AtomicBoolean getLeftForkOccupied() { 29 | return leftForkOccupied; 30 | } 31 | 32 | public AtomicBoolean getRightForkOccupied() { 33 | return rightForkOccupied; 34 | } 35 | 36 | public int getEatenCounter() { 37 | return eatenCounter; 38 | } 39 | 40 | public void setEatenCounter(int eatenCounter) { 41 | this.eatenCounter = eatenCounter; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/com/walking/lesson64_thread_methods/task1/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson64_thread_methods.task1; 2 | 3 | /** 4 | * Напишите программу из 10 последовательно запускающихся потоков. 5 | * Каждый из этих потоков должен выводить в консоль сообщение вида 6 | * «%Имя потока% запущен и не спешит», вызывать yield(), 7 | * а после выводить сообщение «%Имя потока% завершен». 8 | *

9 | * Обратите внимание на порядок вывода. Как он изменится, если убрать yield()? 10 | * Как изменится ситуация, если паре потоков выставить приоритет 10? 11 | */ 12 | public class Main { 13 | public static void main(String[] args) { 14 | Runnable runnable = () -> { 15 | var threadName = Thread.currentThread().getName(); 16 | 17 | System.out.printf("%s запущен и не спешит\n", threadName); 18 | Thread.yield(); 19 | System.out.printf("%s завершен\n", threadName); 20 | }; 21 | 22 | new Thread(runnable).start(); 23 | new Thread(runnable).start(); 24 | new Thread(runnable).start(); 25 | new Thread(runnable).start(); 26 | new Thread(runnable).start(); 27 | new Thread(runnable).start(); 28 | new Thread(runnable).start(); 29 | new Thread(runnable).start(); 30 | new Thread(runnable).start(); 31 | new Thread(runnable).start(); 32 | } 33 | } -------------------------------------------------------------------------------- /src/com/walking/lesson52_stream_creation/task3_flatMap/Main.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson52_stream_creation.task3_flatMap; 2 | 3 | import java.time.LocalDate; 4 | import java.time.Year; 5 | import java.time.format.DateTimeFormatter; 6 | import java.util.stream.Stream; 7 | 8 | /** 9 | * Реализуйте метод, возвращающий Stream из дат месяца, 10 | * номер которого был передан параметром. 11 | * Выведите все даты года в консоль. 12 | * Избегайте дублирования кода. 13 | * В main() Stream должен быть лишь 1. Требует использования flatMap(). 14 | */ 15 | public class Main { 16 | public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 17 | 18 | public static void main(String[] args) { 19 | Year currentYear = Year.now(); 20 | 21 | Stream.iterate(1, i -> i <= 12, i -> ++i) 22 | .flatMap(i -> getDatesOfMonthString(i, currentYear)) 23 | .forEach(System.out::println); 24 | } 25 | 26 | private static Stream getDatesOfMonthString(int monthNumber, Year year) { 27 | LocalDate startDate = LocalDate.of(year.getValue(), monthNumber, 1); 28 | 29 | return Stream.iterate(startDate, date -> date.plusDays(1)) 30 | .limit(year.atMonth(monthNumber).lengthOfMonth()) 31 | .map(date -> date.format(FORMATTER)); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/com/walking/lesson1_varaibles/Task2ComplicatedWithChar.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson1_varaibles; 2 | 3 | /** 4 | * Усложнение для внимательных: вывести ваше имя посимвольно, 5 | * где каждая буква — на новой строке, не используя System.out.println(). 6 | * Реализуется с использованием char. 7 | */ 8 | public class Task2ComplicatedWithChar { 9 | public static void main(String[] args) { 10 | // Объявляем переменную типа char и инициализируем ее первой буквой имени 11 | char ch = 'Е'; 12 | // Выводим значение переменной ch в консоль 13 | System.out.print(ch); 14 | // Используя управляющий символ '\n' переводим курсор на новую строку 15 | System.out.print('\n'); 16 | 17 | // Присваиваем переменной ch следующую букву имени 18 | // Повторяем действия до тех пор, пока буквы в имени не кончатся 19 | ch = 'г'; 20 | System.out.print(ch); 21 | System.out.print('\n'); 22 | 23 | ch = 'о'; 24 | System.out.print(ch); 25 | System.out.print('\n'); 26 | 27 | ch = 'р'; 28 | System.out.print(ch); 29 | } 30 | 31 | /* 32 | * Примечание: также можно было выводить не символы, а строки вида "" + ch + '\n', например: 33 | * System.out.print("" + ch + '\n'); 34 | * 35 | * Однако на данном этапе конкатенация строк не была пройдена 36 | * */ 37 | } 38 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/model/Employee.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.model; 2 | 3 | public class Employee { 4 | private String name; 5 | private boolean isMale; 6 | private String position; 7 | private int age; 8 | 9 | public Employee() { 10 | } 11 | 12 | public Employee(String name, boolean isMale, String position, int age) { 13 | this.name = name; 14 | this.isMale = isMale; 15 | this.position = position; 16 | this.age = age; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | 27 | public boolean isMale() { 28 | return isMale; 29 | } 30 | 31 | public void setMale(boolean male) { 32 | isMale = male; 33 | } 34 | 35 | public String getPosition() { 36 | return position; 37 | } 38 | 39 | public void setPosition(String position) { 40 | this.position = position; 41 | } 42 | 43 | public int getAge() { 44 | return age; 45 | } 46 | 47 | public void setAge(int age) { 48 | this.age = age; 49 | } 50 | 51 | @Override 52 | public String toString() { 53 | return "name=%s, isMale=%s, position=%s, age=%d".formatted(name, isMale, position, age); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/com/walking/lesson30_regex/task4/service/ParserService.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson30_regex.task4.service; 2 | 3 | import com.walking.lesson30_regex.task4.model.TextElement; 4 | import com.walking.lesson30_regex.task4.parser.AbstractParser; 5 | import com.walking.lesson30_regex.task4.parser.ParagraphParser; 6 | import com.walking.lesson30_regex.task4.parser.SentenceParser; 7 | import com.walking.lesson30_regex.task4.parser.TextParser; 8 | 9 | public class ParserService { 10 | private final AbstractParser[] parsers; 11 | private final ValidationService validationService; 12 | 13 | public ParserService() { 14 | this.parsers = new AbstractParser[]{new TextParser(), new ParagraphParser(), new SentenceParser()}; 15 | this.validationService = new ValidationService(); 16 | } 17 | 18 | public TextElement parseText(String text) { 19 | validationService.validate(text); 20 | 21 | return parseText(new TextElement(text), 0); 22 | } 23 | 24 | private TextElement parseText(TextElement textElement, int parserIndex) { 25 | TextElement element = parsers[parserIndex].parse(textElement); 26 | 27 | if (parserIndex != parsers.length - 1) { 28 | for (TextElement child : element.getChildren()) { 29 | parseText(child, parserIndex + 1); 30 | } 31 | } 32 | 33 | return element; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/com/walking/lesson57_stream_collect_collector/task/Task16.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson57_stream_collect_collector.task; 2 | 3 | import com.walking.lesson57_stream_collect_collector.model.Department; 4 | import com.walking.lesson57_stream_collect_collector.model.Employee; 5 | 6 | import java.util.Collection; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.stream.Collectors; 10 | 11 | /** 12 | * По каждой должности (position) предоставьте список сотрудников, 13 | * ее занимающих (допустимо ограничиться обозначением сотрудника по имени). 14 | */ 15 | public class Task16 implements StatisticTask>> { 16 | @Override 17 | public Map> calculate(List departments) { 18 | return departments.stream() 19 | .map(Department::getEmployees) 20 | .flatMap(Collection::stream) 21 | .collect(Collectors.groupingBy( 22 | Employee::getPosition, 23 | Collectors.mapping(Employee::getName, Collectors.toList()))); 24 | 25 | // Если возвращать список самих сотрудников, решение будет проще: 26 | // return departments.stream() 27 | // .map(Department::getEmployees) 28 | // .flatMap(Collection::stream) 29 | // .collect(Collectors.groupingBy(Employee::getPosition)); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/com/walking/lesson6_methods/Task1.java: -------------------------------------------------------------------------------- 1 | package com.walking.lesson6_methods; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * Декомпозировать задачу 7 | * ... 8 | * Вынести в отдельный метод использование switch-case. 9 | * Также вынести в отдельный метод использование System.out.println 10 | */ 11 | public class Task1 { 12 | public static void main(String[] args) { 13 | Scanner scanner = new Scanner(System.in); 14 | 15 | System.out.print("Enter string: "); 16 | String greeting = scanner.nextLine(); 17 | 18 | scanner.close(); 19 | 20 | printAnswer(greeting); 21 | } 22 | 23 | static void printAnswer(String greeting) { 24 | String answer; 25 | 26 | switch (greeting) { 27 | case "Hi": 28 | answer = "Hello"; 29 | break; 30 | 31 | case "Bye": 32 | answer = "Good bye"; 33 | break; 34 | 35 | case "How are you": 36 | answer = "How are your doing"; 37 | break; 38 | 39 | default: 40 | answer = "Unknown message"; 41 | } 42 | 43 | log(answer); 44 | } 45 | 46 | static void log(String message) { 47 | System.out.println(message); 48 | } 49 | } 50 | --------------------------------------------------------------------------------