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..cd4a875 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,90 @@ 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(NoSuchElementException::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(NoSuchElementException::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).findAny(); + Optional score2 = t1.getExams().stream().filter(exam -> exam.getType() == Exam.Type.ENGLISH).findAny(); + + 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..77e5c70 Binary files /dev/null and b/target/classes/com/kpi/fict/DefaultStudentService.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 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..b07a22e --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,6 @@ +com/kpi/fict/DefaultStudentService.class +com/kpi/fict/repositories/StudentRepository.class +com/kpi/fict/entities/Exam$Type.class +com/kpi/fict/StudentService.class +com/kpi/fict/entities/Student.class +com/kpi/fict/entities/Exam.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..45e34ec --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,5 @@ +/home/windows/javaLab/java-lab01/src/main/java/com/kpi/fict/entities/Exam.java +/home/windows/javaLab/java-lab01/src/main/java/com/kpi/fict/repositories/StudentRepository.java +/home/windows/javaLab/java-lab01/src/main/java/com/kpi/fict/DefaultStudentService.java +/home/windows/javaLab/java-lab01/src/main/java/com/kpi/fict/entities/Student.java +/home/windows/javaLab/java-lab01/src/main/java/com/kpi/fict/StudentService.java