From 9b6859ae911885905371597c9164db91b0a25933 Mon Sep 17 00:00:00 2001 From: CodeGangsta44 Date: Mon, 2 Dec 2019 23:49:13 +0200 Subject: [PATCH 1/2] Lab done --- .idea/.gitignore | 2 + .idea/compiler.xml | 16 +++++ .../Maven__net_bytebuddy_byte_buddy_1_9_3.xml | 13 ++++ ...__net_bytebuddy_byte_buddy_agent_1_9_3.xml | 13 ++++ ..._org_apiguardian_apiguardian_api_1_0_0.xml | 13 ++++ .../Maven__org_hamcrest_hamcrest_2_1.xml | 13 ++++ .../Maven__org_hamcrest_hamcrest_core_2_1.xml | 13 ++++ ...ven__org_hamcrest_hamcrest_library_2_1.xml | 13 ++++ ..._junit_jupiter_junit_jupiter_api_5_3_2.xml | 13 ++++ ...nit_jupiter_junit_jupiter_engine_5_3_2.xml | 13 ++++ ..._platform_junit_platform_commons_1_3_2.xml | 13 ++++ ...t_platform_junit_platform_engine_1_3_2.xml | 13 ++++ ...Maven__org_mockito_mockito_core_2_23_4.xml | 13 ++++ .../Maven__org_objenesis_objenesis_2_6.xml | 13 ++++ ...Maven__org_opentest4j_opentest4j_1_1_1.xml | 13 ++++ .idea/misc.xml | 11 +++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ java-lab01.iml | 26 +++++++ .../com/kpi/fict/DefaultStudentService.java | 71 +++++++++++++++++-- 20 files changed, 303 insertions(+), 6 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_3.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_3.xml create mode 100644 .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_0_0.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_library_2_1.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_3_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_3_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_3_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_3_2.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml create mode 100644 .idea/libraries/Maven__org_objenesis_objenesis_2_6.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_1_1.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 java-lab01.iml 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..6f6e55e --- /dev/null +++ b/java-lab01.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index aedb111..24088dd 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,85 @@ 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() + .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() { From ccb19ff2a1077ed2481461c8db4eadcd66f89bde Mon Sep 17 00:00:00 2001 From: CodeGangsta44 Date: Mon, 2 Dec 2019 23:49:13 +0200 Subject: [PATCH 2/2] Lab done --- .idea/.gitignore | 2 + .idea/compiler.xml | 16 +++++ ...Maven__net_bytebuddy_byte_buddy_1_9_10.xml | 13 ++++ ..._net_bytebuddy_byte_buddy_agent_1_9_10.xml | 13 ++++ ..._org_apiguardian_apiguardian_api_1_1_0.xml | 13 ++++ .../Maven__org_hamcrest_hamcrest_2_1.xml | 13 ++++ .../Maven__org_hamcrest_hamcrest_core_2_1.xml | 13 ++++ ...ven__org_hamcrest_hamcrest_library_2_1.xml | 13 ++++ ..._junit_jupiter_junit_jupiter_api_5_5_2.xml | 13 ++++ ...nit_jupiter_junit_jupiter_engine_5_3_2.xml | 13 ++++ ..._platform_junit_platform_commons_1_5_2.xml | 13 ++++ ...t_platform_junit_platform_engine_1_3_2.xml | 13 ++++ .../Maven__org_mockito_mockito_core_3_1_0.xml | 13 ++++ .../Maven__org_objenesis_objenesis_2_6.xml | 13 ++++ ...Maven__org_opentest4j_opentest4j_1_2_0.xml | 13 ++++ .idea/misc.xml | 11 +++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ java-lab01.iml | 26 +++++++ .../com/kpi/fict/DefaultStudentService.java | 72 +++++++++++++++++-- 20 files changed, 304 insertions(+), 6 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_10.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_10.xml create mode 100644 .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_library_2_1.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_3_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_3_2.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml create mode 100644 .idea/libraries/Maven__org_objenesis_objenesis_2_6.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 java-lab01.iml 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_10.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_10.xml new file mode 100644 index 0000000..9bddfcc --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_10.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_10.xml new file mode 100644 index 0000000..b82578b --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_10.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml new file mode 100644 index 0000000..f854ab0 --- /dev/null +++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_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_5_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml new file mode 100644 index 0000000..8fbc8ce --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_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_5_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml new file mode 100644 index 0000000..4192cdc --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_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_3_1_0.xml b/.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml new file mode 100644 index 0000000..c18526d --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.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_2_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml new file mode 100644 index 0000000..fbc1b16 --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.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..0d2d479 --- /dev/null +++ b/java-lab01.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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() {