From f9312ab9fa4feac7ee99a7dbb9080dfc8c6d4c8c Mon Sep 17 00:00:00 2001 From: Nick Grigorjev Date: Fri, 16 Aug 2024 08:31:56 +0400 Subject: [PATCH 1/2] Init commit --- pom.xml | 12 ++-- src/main/java/faangschool/magic/Main.java | 40 +++++++++++ src/main/java/faangschool/magic/Student.java | 60 ++++++++++++++++ .../magic/StudentNameComparatorASC.java | 11 +++ .../magic/StudentNameComparatorDESC.java | 10 +++ .../magic/collection/CompositeKey.java | 19 +++++ .../magic/collection/CountOccurrences.java | 17 +++++ .../faangschool/magic/collection/Main.java | 72 +++++++++++++++++++ .../magic/collection/ReverseMapping.java | 24 +++++++ .../faangschool/magic/collection/Student.java | 16 +++++ src/main/java/fromsber/Employee.java | 36 ++++++++++ .../java/fromsber/EmployeeController.java | 48 +++++++++++++ src/main/java/fromsber/Status.java | 5 ++ .../magic/collection/MainTest.java | 68 ++++++++++++++++++ src/test/java/letscode/javalearn/Streams.java | 34 ++++----- 15 files changed, 450 insertions(+), 22 deletions(-) create mode 100644 src/main/java/faangschool/magic/Main.java create mode 100644 src/main/java/faangschool/magic/Student.java create mode 100644 src/main/java/faangschool/magic/StudentNameComparatorASC.java create mode 100644 src/main/java/faangschool/magic/StudentNameComparatorDESC.java create mode 100644 src/main/java/faangschool/magic/collection/CompositeKey.java create mode 100644 src/main/java/faangschool/magic/collection/CountOccurrences.java create mode 100644 src/main/java/faangschool/magic/collection/Main.java create mode 100644 src/main/java/faangschool/magic/collection/ReverseMapping.java create mode 100644 src/main/java/faangschool/magic/collection/Student.java create mode 100644 src/main/java/fromsber/Employee.java create mode 100644 src/main/java/fromsber/EmployeeController.java create mode 100644 src/main/java/fromsber/Status.java create mode 100644 src/test/java/faangschool/magic/collection/MainTest.java diff --git a/pom.xml b/pom.xml index 3ffdac1..430963b 100644 --- a/pom.xml +++ b/pom.xml @@ -21,16 +21,18 @@ - - junit - junit - LATEST - org.projectlombok lombok LATEST + + + org.junit.jupiter + junit-jupiter-api + 5.10.2 + test + diff --git a/src/main/java/faangschool/magic/Main.java b/src/main/java/faangschool/magic/Main.java new file mode 100644 index 0000000..56857af --- /dev/null +++ b/src/main/java/faangschool/magic/Main.java @@ -0,0 +1,40 @@ +package faangschool.magic; + +import fromsber.Employee; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +public class Main { + public static void main(String[] args) { + Student student = new Student(); + Student student2 = new Student(); + Student student3 = new Student(); + Student student4 = new Student(); + + student2.setAge(15); + student2.setName("Alpha"); + student.setAge(18); + student.setName("Mozol"); + student4.setAge(16); + student4.setName("Bruce"); + student3.setAge(56); + student3.setName("Zoo"); + + Student[] students = new Student[]{student, student2, student3, student4}; + + System.out.println("Unsorted array " + Arrays.toString(students)); + + Arrays.sort(students); + + System.out.println("Sorted array " + Arrays.toString(students)); + + Arrays.stream(students).sorted(new StudentNameComparatorASC()).forEach(System.out::println); + System.out.println(); + + Arrays.stream(students).sorted(new StudentNameComparatorDESC()).forEach(System.out::println); + + + } +} diff --git a/src/main/java/faangschool/magic/Student.java b/src/main/java/faangschool/magic/Student.java new file mode 100644 index 0000000..1d04943 --- /dev/null +++ b/src/main/java/faangschool/magic/Student.java @@ -0,0 +1,60 @@ +package faangschool.magic; + + +import java.util.Arrays; +import java.util.Comparator; + +public class Student + implements Comparable { + private String name; + private int age; + private String faculty; + private String[] abilities; + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public String getFaculty() { + return faculty; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "Student{" + + "name='" + name + '\'' + + ", age=" + age + +// ", faculty='" + faculty + '\'' + +// ", abilities=" + Arrays.toString(abilities) + + '}'; + } + + public void setAge(int age) { + this.age = age; + } + + public void setFaculty(String faculty) { + this.faculty = faculty; + } + + public void setAbilities(String[] abilities) { + this.abilities = abilities; + } + + public String[] getAbilities() { + return abilities; + } + + @Override + public int compareTo(Student o) { + return this.age - o.age; + } +} diff --git a/src/main/java/faangschool/magic/StudentNameComparatorASC.java b/src/main/java/faangschool/magic/StudentNameComparatorASC.java new file mode 100644 index 0000000..c34a44a --- /dev/null +++ b/src/main/java/faangschool/magic/StudentNameComparatorASC.java @@ -0,0 +1,11 @@ +package faangschool.magic; + +import java.util.Comparator; + +public class StudentNameComparatorASC implements Comparator { + + @Override + public int compare(Student o1, Student o2) { + return o1.getName().compareTo(o2.getName()); + } +} diff --git a/src/main/java/faangschool/magic/StudentNameComparatorDESC.java b/src/main/java/faangschool/magic/StudentNameComparatorDESC.java new file mode 100644 index 0000000..48a1137 --- /dev/null +++ b/src/main/java/faangschool/magic/StudentNameComparatorDESC.java @@ -0,0 +1,10 @@ +package faangschool.magic; + +import java.util.Comparator; + +public class StudentNameComparatorDESC implements Comparator { + @Override + public int compare(Student o1, Student o2) { + return o2.getName().compareTo(o1.getName()); + } +} diff --git a/src/main/java/faangschool/magic/collection/CompositeKey.java b/src/main/java/faangschool/magic/collection/CompositeKey.java new file mode 100644 index 0000000..650d8c2 --- /dev/null +++ b/src/main/java/faangschool/magic/collection/CompositeKey.java @@ -0,0 +1,19 @@ +package faangschool.magic.collection; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +@AllArgsConstructor +@Data +@Builder +public class CompositeKey { + + private final String faculty; + private final int year; + + +} + + diff --git a/src/main/java/faangschool/magic/collection/CountOccurrences.java b/src/main/java/faangschool/magic/collection/CountOccurrences.java new file mode 100644 index 0000000..bc2361c --- /dev/null +++ b/src/main/java/faangschool/magic/collection/CountOccurrences.java @@ -0,0 +1,17 @@ +package faangschool.magic.collection; + +import java.util.HashMap; + +public class CountOccurrences { + public static void main(String[] args) { + int[] arr = {1, 2, 3, 4, 2, 1, 3, 4, 5, 1}; + + HashMap map = new HashMap<>(); + + for (int i : arr) { + map.put(i, map.getOrDefault(i, 0) + 1); + } + + System.out.println(map); + } +} diff --git a/src/main/java/faangschool/magic/collection/Main.java b/src/main/java/faangschool/magic/collection/Main.java new file mode 100644 index 0000000..7097636 --- /dev/null +++ b/src/main/java/faangschool/magic/collection/Main.java @@ -0,0 +1,72 @@ +package faangschool.magic.collection; + +import java.util.*; +import java.util.stream.Collectors; + +import static java.util.List.*; + +public class Main { + + public static List initStudents; + public static Map> students; + + static { + initStudents = of( + Student.builder().name("Boris").faculty("Math").year(2006).build(), + Student.builder().name("Vasily").faculty("Physic").year(2011).build(), + Student.builder().name("Nick").faculty("Chemistry").year(2015).build(), + Student.builder().name("Ahmed").faculty("Math").year(2003).build(), + Student.builder().name("Marina").faculty("Economic").year(2013).build(), + Student.builder().name("Olga").faculty("Biology").year(2005).build(), + Student.builder().name("Maria").faculty("Chemistry").year(2015).build(), + Student.builder().name("Georgy").faculty("Physic").year(2004).build(), + Student.builder().name("Stepan").faculty("Literature").year(2008).build(), + Student.builder().name("Anna").faculty("Literature").year(2004).build(), + Student.builder().name("Semen").faculty("Physic").year(2011).build() + ); + + students = getStudentsGroupingByFacultyAndYear(initStudents); + } + + + public static void main(String[] args) { + + for (Map.Entry> entry: students.entrySet()) { + System.out.println(); + } + } + + public static Map> getStudentsGroupingByFacultyAndYear(List students){ + return students + .stream() + .collect(Collectors.groupingBy(c-> new CompositeKey(c.getFaculty(), c.getYear()))); + } + + //TODO 16.08.2024 - 8:29: refactor method + public static boolean addStudent(Student student) { + ArrayList emptyStudentsLists = new ArrayList<>(); + + if(student != null) { + CompositeKey key = new CompositeKey(student.getFaculty(), student.getYear()); + + if(!students.containsKey(key)) { + students.put(key, students.getOrDefault(key, emptyStudentsLists)); + return true; + } + } else{ + return false; + } + return false; + } + + //TODO 16.08.2024 - 8:29: refactor method + public static boolean deleteStudent(Student student) { + CompositeKey maybeStudent = new CompositeKey(student.getFaculty(), student.getYear()); + if(students.containsKey(maybeStudent)) { + students.remove(maybeStudent); + return true; + } else { + return false; + } + } +} diff --git a/src/main/java/faangschool/magic/collection/ReverseMapping.java b/src/main/java/faangschool/magic/collection/ReverseMapping.java new file mode 100644 index 0000000..1a96102 --- /dev/null +++ b/src/main/java/faangschool/magic/collection/ReverseMapping.java @@ -0,0 +1,24 @@ +package faangschool.magic.collection; + +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Collectors; + +public class ReverseMapping { + public static void main(String[] args) { + + HashMap countryCapital = new HashMap<>(); + countryCapital.put("France", "Paris"); + countryCapital.put("England", "London"); + countryCapital.put("Russia", "Moscow"); + + System.out.println(countryCapital); + + Map capitalCountry = countryCapital + .entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); + + System.out.println(capitalCountry); + } +} diff --git a/src/main/java/faangschool/magic/collection/Student.java b/src/main/java/faangschool/magic/collection/Student.java new file mode 100644 index 0000000..fa9f635 --- /dev/null +++ b/src/main/java/faangschool/magic/collection/Student.java @@ -0,0 +1,16 @@ +package faangschool.magic.collection; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class Student { + + private String name; + private String faculty; + private int year; + + + +} diff --git a/src/main/java/fromsber/Employee.java b/src/main/java/fromsber/Employee.java new file mode 100644 index 0000000..e6b2017 --- /dev/null +++ b/src/main/java/fromsber/Employee.java @@ -0,0 +1,36 @@ +package fromsber; + +public class Employee { + + private String name; + private Status status; + + public Employee(String name, Status status) { + this.name = name; + this.status = status; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Status getStatus() { + return status; + } + + @Override + public String toString() { + return "Employee{" + + "name='" + name + '\'' + + ", status=" + status + + '}'; + } + + public void setStatus(Status status) { + this.status = status; + } +} diff --git a/src/main/java/fromsber/EmployeeController.java b/src/main/java/fromsber/EmployeeController.java new file mode 100644 index 0000000..26fe3e8 --- /dev/null +++ b/src/main/java/fromsber/EmployeeController.java @@ -0,0 +1,48 @@ +package fromsber; + +import java.util.*; +import java.util.stream.Collectors; + +//@RestController +public class EmployeeController { + + + private List employees; + + public EmployeeController() { + } + + public Map> getListEmployee(List employees) { +// Map> map = new HashMap<>(); +// +// for (Employee employee : employees) { +// ArrayList emptyList = new ArrayList<>(); +// List orDefault = map.getOrDefault(employee.getStatus(), emptyList); +// orDefault.add(employee); +// map.put(employee.getStatus(), orDefault); +// } +// return map; + + return employees.stream().collect(Collectors.groupingBy(Employee::getStatus)); + } + + public static void main(String[] args) { + + EmployeeController employeeController = new EmployeeController(); + List employeeList = new ArrayList<>( + Arrays.asList( + new Employee("Masha", Status.ACCEPTED), + new Employee("Nick", Status.ACCEPTED), + new Employee("Sasha", Status.NOT_ACCEPTED), + new Employee("Dasha", Status.ACCEPTED), + new Employee("Misha", Status.NOT_ACCEPTED) + ) + ); + + + System.out.println(employeeList.get(1).getStatus()); + Map> listEmployee = employeeController.getListEmployee(employeeList); + + System.out.println(listEmployee); + } +} diff --git a/src/main/java/fromsber/Status.java b/src/main/java/fromsber/Status.java new file mode 100644 index 0000000..9a3fdf0 --- /dev/null +++ b/src/main/java/fromsber/Status.java @@ -0,0 +1,5 @@ +package fromsber; + +public enum Status { + ACCEPTED, NOT_ACCEPTED +} diff --git a/src/test/java/faangschool/magic/collection/MainTest.java b/src/test/java/faangschool/magic/collection/MainTest.java new file mode 100644 index 0000000..c7f156d --- /dev/null +++ b/src/test/java/faangschool/magic/collection/MainTest.java @@ -0,0 +1,68 @@ +package faangschool.magic.collection; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static java.util.List.of; + + + +public class MainTest { + + public static List initStudents; + public static Map> students; + + private static Student BORIS_STUDENT = Student.builder().name("Boris").faculty("Math").year(2006).build(); + + + @BeforeAll + public static void data() { + + initStudents = of( + Student.builder().name("Boris").faculty("Math").year(2006).build(), + Student.builder().name("Vasily").faculty("Physic").year(2011).build(), + Student.builder().name("Nick").faculty("Chemistry").year(2015).build(), + Student.builder().name("Ahmed").faculty("Math").year(2003).build(), + Student.builder().name("Marina").faculty("Economic").year(2013).build(), + Student.builder().name("Olga").faculty("Biology").year(2005).build(), + Student.builder().name("Maria").faculty("Chemistry").year(2015).build(), + Student.builder().name("Georgy").faculty("Physic").year(2004).build(), + Student.builder().name("Stepan").faculty("Literature").year(2008).build(), + Student.builder().name("Anna").faculty("Literature").year(2004).build(), + Student.builder().name("Semen").faculty("Physic").year(2011).build() + ); + + students = initStudents + .stream() + .collect(Collectors.groupingBy(c-> new CompositeKey(c.getFaculty(), c.getYear()))); + + for (Map.Entry> entry: students.entrySet()) { + System.out.println("key: " + entry.getKey() + " value: " + entry.getValue()); + } + + System.out.println("@BeforeAll finished================"); + } + + + + + @Test + public void testAddStudent() { + + Assertions.assertFalse(Main.addStudent(BORIS_STUDENT)); + } + + + @Test + public void testDeleteStudent() { + Assertions.assertTrue(Main.deleteStudent(BORIS_STUDENT)); + } + + public void testGetStudentsGroupingByFacultyAndYear() { + } +} \ No newline at end of file diff --git a/src/test/java/letscode/javalearn/Streams.java b/src/test/java/letscode/javalearn/Streams.java index d3c4fab..fdb086e 100644 --- a/src/test/java/letscode/javalearn/Streams.java +++ b/src/test/java/letscode/javalearn/Streams.java @@ -4,7 +4,7 @@ import letscode.javalearn.domain.Employee; import letscode.javalearn.domain.Event; import letscode.javalearn.domain.Position; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.File; import java.io.IOException; @@ -18,22 +18,22 @@ public class Streams { private List emps = List.of( - new Employee("Michael", "Smith", 243, 43, Position.CHEF), - new Employee("Jane", "Smith", 523, 40, Position.MANAGER), - new Employee("Jury", "Gagarin", 6423, 26, Position.MANAGER), - new Employee("Jack", "London", 5543, 53, Position.WORKER), - new Employee("Eric", "Jackson", 2534, 22, Position.WORKER), - new Employee("Andrew", "Bosh", 3456, 44, Position.WORKER), - new Employee("Joe", "Smith", 723, 30, Position.MANAGER), - new Employee("Jack", "Gagarin", 7423, 35, Position.MANAGER), - new Employee("Jane", "London", 7543, 42, Position.WORKER), - new Employee("Mike", "Jackson", 7534, 31, Position.WORKER), - new Employee("Jack", "Bosh", 7456, 54, Position.WORKER), - new Employee("Mark", "Smith", 123, 41, Position.MANAGER), - new Employee("Jane", "Gagarin", 1423, 28, Position.MANAGER), - new Employee("Sam", "London", 1543, 52, Position.WORKER), - new Employee("Jack", "Jackson", 1534, 27, Position.WORKER), - new Employee("Eric", "Bosh", 1456, 32, Position.WORKER) + new Employee("Michael", "Smith", 243, 43, Position.CHEF), + new Employee("Jane", "Smith", 523, 40, Position.MANAGER), + new Employee("Jury", "Gagarin", 6423, 26, Position.MANAGER), + new Employee("Jack", "London", 5543, 53, Position.WORKER), + new Employee("Eric", "Jackson", 2534, 22, Position.WORKER), + new Employee("Andrew", "Bosh", 3456, 44, Position.WORKER), + new Employee("Joe", "Smith", 723, 30, Position.MANAGER), + new Employee("Jack", "Gagarin", 7423, 35, Position.MANAGER), + new Employee("Jane", "London", 7543, 42, Position.WORKER), + new Employee("Mike", "Jackson", 7534, 31, Position.WORKER), + new Employee("Jack", "Bosh", 7456, 54, Position.WORKER), + new Employee("Mark", "Smith", 123, 41, Position.MANAGER), + new Employee("Jane", "Gagarin", 1423, 28, Position.MANAGER), + new Employee("Sam", "London", 1543, 52, Position.WORKER), + new Employee("Jack", "Jackson", 1534, 27, Position.WORKER), + new Employee("Eric", "Bosh", 1456, 32, Position.WORKER) ); private List deps = List.of( From edfb6630c0bece8058ba31373e81573a6a286488 Mon Sep 17 00:00:00 2001 From: Nick Grigorjev Date: Fri, 16 Aug 2024 09:13:51 +0400 Subject: [PATCH 2/2] Init commit --- .../magic/collection/MutableKey.java | 33 +++++++++++++++++++ .../magic/collection/MainTest.java | 7 ++-- 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 src/main/java/faangschool/magic/collection/MutableKey.java diff --git a/src/main/java/faangschool/magic/collection/MutableKey.java b/src/main/java/faangschool/magic/collection/MutableKey.java new file mode 100644 index 0000000..b657330 --- /dev/null +++ b/src/main/java/faangschool/magic/collection/MutableKey.java @@ -0,0 +1,33 @@ +package faangschool.magic.collection; + +import java.util.Objects; + +public class MutableKey { + + private String key; + + public MutableKey(String key) { + this.key = key; + } + + public void setKey(String key) { + this.key = key; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if(o == null || getClass() != o.getClass()) { + return false; + } + MutableKey that = (MutableKey) o; + return Objects.equals(key, that.key); + } + + @Override + public int hashCode() { + return Objects.hashCode(key); + } +} diff --git a/src/test/java/faangschool/magic/collection/MainTest.java b/src/test/java/faangschool/magic/collection/MainTest.java index c7f156d..00bb7e6 100644 --- a/src/test/java/faangschool/magic/collection/MainTest.java +++ b/src/test/java/faangschool/magic/collection/MainTest.java @@ -9,7 +9,7 @@ import java.util.stream.Collectors; import static java.util.List.of; - +import static org.junit.jupiter.api.Assertions.*; public class MainTest { @@ -53,14 +53,13 @@ public static void data() { @Test public void testAddStudent() { - - Assertions.assertFalse(Main.addStudent(BORIS_STUDENT)); + assertFalse(Main.addStudent(BORIS_STUDENT)); } @Test public void testDeleteStudent() { - Assertions.assertTrue(Main.deleteStudent(BORIS_STUDENT)); + assertTrue(Main.deleteStudent(BORIS_STUDENT)); } public void testGetStudentsGroupingByFacultyAndYear() {