From fde982705896d545deef19bd13a813ce892d735a Mon Sep 17 00:00:00 2001 From: OliaOrel Date: Tue, 10 Dec 2019 17:30:50 +0200 Subject: [PATCH 1/2] Add solution --- .../com/kpi/fict/DefaultStudentService.java | 145 +++++++++++++----- 1 file changed, 104 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index a59a60e..99eda22 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -1,47 +1,110 @@ package com.kpi.fict; -import com.kpi.fict.entities.Student; import com.kpi.fict.repositories.StudentRepository; -import java.util.List; - public class DefaultStudentService implements StudentService { - private StudentRepository studentRepository; - - public DefaultStudentService(StudentRepository studentRepository) { - this.studentRepository = studentRepository; - } - - @Override - public Student findFirstWithoutMath() { - throw new UnsupportedOperationException("Need to make implementation"); - } - - @Override - public List findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { - throw new UnsupportedOperationException("Need to make implementation"); - } - - @Override - public List getExamSumAndRatingForEachStudent() { - throw new UnsupportedOperationException("Need to make implementation"); - } - - @Override - public List findStudentsWithTwoExams() { - throw new UnsupportedOperationException("Need to make implementation"); - } - - @Override - public Student findStudentWithMaxEngRating() { - throw new UnsupportedOperationException("Need to make implementation"); - } - - public StudentRepository getStudentRepository() { - return studentRepository; - } - - public void setStudentRepository(StudentRepository studentRepository) { - this.studentRepository = studentRepository; - } + private StudentRepository studentRepository; + + public DefaultStudentService(StudentRepository studentRepository) { + this.studentRepository = studentRepository; + } + + @Override + public Student findFirstWithoutMath() { + return studentRepository + .findAll() + .stream() + .filter(student -> student + .getExams() + .stream() + .noneMatch(exam -> exam.getType() == Exam.Type.MATH)) + .findFirst() + .orElseThrow(NoSuchFieldError::new); + } + + @Override + public List findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { + 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 List getExamSumAndRatingForEachStudent() { + return studentRepository + .findAll() + .stream() + .map(student -> student + .getExams() + .stream() + .mapToDouble(Exam::getScore) + .sum() + + "," + + student.getRating() + + "," + + student.getName()) + .collect(Collectors.toList()); + } + + @Override + public List findStudentsWithTwoExams() { + return studentRepository + .findAll() + .stream() + .filter(student -> student.getExams().size() == 2) + .collect(Collectors.toList()); + } + + @Override + public Student findStudentWithMaxEngRating() { + 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); + } + + public StudentRepository getStudentRepository() { + return studentRepository; + } + + public void setStudentRepository(StudentRepository studentRepository) { + this.studentRepository = studentRepository; + } } From 9fcc4627282f80a0f143a3f7eb2d5d86e8a1fed6 Mon Sep 17 00:00:00 2001 From: OliaOrel Date: Tue, 10 Dec 2019 17:34:00 +0200 Subject: [PATCH 2/2] Add my solution --- src/main/java/com/kpi/fict/DefaultStudentService.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index 99eda22..2a3c0ea 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -1,7 +1,10 @@ package com.kpi.fict; +import com.kpi.fict.entities.Student; import com.kpi.fict.repositories.StudentRepository; +import java.util.List; + public class DefaultStudentService implements StudentService { private StudentRepository studentRepository;