diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..907e6e3 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_3.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_3.xml new file mode 100644 index 0000000..183a430 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_3.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_3.xml new file mode 100644 index 0000000..be4d19f --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_0_0.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_0_0.xml new file mode 100644 index 0000000..a82457d --- /dev/null +++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml new file mode 100644 index 0000000..b170293 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml new file mode 100644 index 0000000..2456ee8 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_2_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_2_1.xml new file mode 100644 index 0000000..3b34e7a --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_3_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_3_2.xml new file mode 100644 index 0000000..75b2f5e --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_3_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_3_2.xml new file mode 100644 index 0000000..c8bdfa0 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_3_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_3_2.xml new file mode 100644 index 0000000..26372d3 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_3_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_3_2.xml new file mode 100644 index 0000000..c5427fe --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml b/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml new file mode 100644 index 0000000..159204f --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml new file mode 100644 index 0000000..af41e3b --- /dev/null +++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_1_1.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_1_1.xml new file mode 100644 index 0000000..70277df --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..972ec8d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..860edc6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/java-lab01.iml b/java-lab01.iml new file mode 100644 index 0000000..0792356 --- /dev/null +++ b/java-lab01.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7f3100f..8c1d8bf 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,19 @@ 2.1 test + + org.junit.jupiter + junit-jupiter-api + 5.5.2 + compile + + + org.mockito + mockito-core + 3.1.0 + compile + + diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index aedb111..7818fae 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -1,9 +1,11 @@ package com.kpi.fict; +import com.kpi.fict.entities.Exam; import com.kpi.fict.entities.Student; import com.kpi.fict.repositories.StudentRepository; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; public class DefaultStudentService implements StudentService { private StudentRepository studentRepository; @@ -14,28 +16,86 @@ public DefaultStudentService(StudentRepository studentRepository) { @Override public Student findFirstWithoutMath() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .filter(student -> student + .getExams() + .stream() + .noneMatch(exam -> exam.getType() == Exam.Type.MATH)) + .findFirst() + .orElseThrow(NoSuchFieldError::new); } @Override public List findStudentsWhoTakeEngExamWith11RatingOrMore() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository.findAll() + .stream() + .filter(student -> student + .getExams() + .stream() + .anyMatch(exam -> exam.getType() == Exam.Type.ENGLISH) + && + student.getRating() >= 11) + .collect(Collectors.toList()); } @Override public List findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { - throw new UnsupportedOperationException("Need to make implementation"); + OptionalDouble average = studentRepository + .findAll() + .stream() + .map(Student::getExams) + .flatMap(Collection::stream) + .filter(exam -> exam.getType() == Exam.Type.MATH) + .mapToDouble(Exam::getScore) + .average(); + + double avg = average.orElseThrow(NoSuchFieldError::new); + + + return studentRepository.findAll() + .stream() + .filter(student -> + + student.getExams() + .stream() + .anyMatch(exam -> exam.getType() == Exam.Type.ENGLISH) + && + student.getExams() + .stream() + .anyMatch(exam -> exam.getType() == Exam.Type.MATH + && + exam.getScore() > avg)) + .collect(Collectors.toList()); } @Override public Student findStudentWithMaxEngRating() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository.findAll().stream() + .filter(student -> student.getExams().stream().anyMatch(exam -> exam.getType() == Exam.Type.ENGLISH)) + .max((student, t1) -> { + Optional score1 = student.getExams().stream().filter(exam -> exam.getType() == Exam.Type.ENGLISH).findFirst(); + Optional score2 = t1.getExams().stream().filter(exam -> exam.getType() == Exam.Type.ENGLISH).findFirst(); + + return (int) (score1.get().getScore() - score2.get().getScore()); + }).orElseThrow(NoSuchElementException::new); } //Delimiter: ',' @Override public List getExamSumAndRatingForEachStudent() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository.findAll().stream() + .map(student -> student + .getExams() + .stream() + .mapToDouble(Exam::getScore) + .sum() + + "," + + student.getRating() + + "," + + student.getName()) + .collect(Collectors.toList()); } public StudentRepository getStudentRepository() { diff --git a/target/classes/com/kpi/fict/DefaultStudentService.class b/target/classes/com/kpi/fict/DefaultStudentService.class new file mode 100644 index 0000000..4a3fc16 Binary files /dev/null and b/target/classes/com/kpi/fict/DefaultStudentService.class differ diff --git a/target/classes/com/kpi/fict/DefaultStudentServiceTest.class b/target/classes/com/kpi/fict/DefaultStudentServiceTest.class new file mode 100644 index 0000000..9d96b1b Binary files /dev/null and b/target/classes/com/kpi/fict/DefaultStudentServiceTest.class differ diff --git a/target/classes/com/kpi/fict/StudentService.class b/target/classes/com/kpi/fict/StudentService.class new file mode 100644 index 0000000..f5c020a Binary files /dev/null and b/target/classes/com/kpi/fict/StudentService.class differ diff --git a/target/classes/com/kpi/fict/entities/Exam$Type.class b/target/classes/com/kpi/fict/entities/Exam$Type.class new file mode 100644 index 0000000..a0cd878 Binary files /dev/null and b/target/classes/com/kpi/fict/entities/Exam$Type.class differ diff --git a/target/classes/com/kpi/fict/entities/Exam.class b/target/classes/com/kpi/fict/entities/Exam.class new file mode 100644 index 0000000..3bd8fba Binary files /dev/null and b/target/classes/com/kpi/fict/entities/Exam.class differ diff --git a/target/classes/com/kpi/fict/entities/Student.class b/target/classes/com/kpi/fict/entities/Student.class new file mode 100644 index 0000000..14eade0 Binary files /dev/null and b/target/classes/com/kpi/fict/entities/Student.class differ diff --git a/target/classes/com/kpi/fict/repositories/StudentRepository.class b/target/classes/com/kpi/fict/repositories/StudentRepository.class new file mode 100644 index 0000000..8892474 Binary files /dev/null and b/target/classes/com/kpi/fict/repositories/StudentRepository.class differ