diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index 1f47f2d..21bfd97 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -1,9 +1,12 @@ 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.Collection; import java.util.List; +import java.util.stream.Collectors; public class DefaultStudentService implements StudentService { private StudentRepository studentRepository; @@ -14,28 +17,71 @@ public DefaultStudentService(StudentRepository studentRepository) { @Override public List findAllWithRatingLessThan300() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .filter(s -> s + .getExams() + .stream() + .map(Exam::getScore) + .reduce(0.0, Double::sum) < 300) + .collect(Collectors.toList()); } @Override public double findAvgRatingOfMathExam() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .map(Student::getExams) + .flatMap(Collection::stream) + .filter(e -> e.getType() == Exam.Type.MATH) + .mapToDouble(Exam::getScore) + .average() + .orElse(0.0); } //Delimiter: ',' @Override public List calculateAvgRatingForEachStudent() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .map(s -> s.getName() + "," + s + .getExams() + .stream() + .mapToDouble(Exam::getScore) + .average() + .orElse(0.0)) + .collect(Collectors.toList()); } @Override public List findStudentsWithoutExams() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .filter(s -> s.getExams().size() == 0) + .collect(Collectors.toList()); } @Override public List findStudentsWithRatingMoreThanAvgAndTakeMathExam() { - throw new UnsupportedOperationException("Need to make implementation"); + double avgRating = studentRepository + .findAll() + .stream() + .mapToDouble(Student::getRating) + .average() + .orElse(0.0); + + return studentRepository + .findAll() + .stream() + .filter(s -> s.getRating() > avgRating && s + .getExams() + .stream() + .anyMatch(e -> e.getType() == Exam.Type.MATH)) + .collect(Collectors.toList()); } public StudentRepository getStudentRepository() {