From 3f3145e0f0f0ac0ddc194df2f46c2a0383f8bb12 Mon Sep 17 00:00:00 2001 From: "@dimanadko" Date: Fri, 13 Dec 2019 10:57:43 +0200 Subject: [PATCH 1/2] feat: implement lab --- .../com/kpi/fict/DefaultStudentService.java | 67 +++++++++++++++++-- 1 file changed, 62 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index ad330d6..8723623 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -14,28 +14,85 @@ public DefaultStudentService(StudentRepository studentRepository) { @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 findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { - throw new UnsupportedOperationException("Need to make implementation"); + double avg = studentRepository + .findAll() + .stream() + .flatMap(s -> s.getExams().stream()) + .filter(e -> e.getType() == Exam.Type.MATH) + .mapToDouble(Exam::getScore) + .average() + .orElse(0.); + return studentRepository + .findAll() + .stream() + .filter(s -> + s + .getExams() + .stream() + .filter(e -> e.getType() == Exam.Type.MATH) + .findFirst() + .orElse(new Exam(Exam.Type.MATH, 0)) + .getScore() > avg && + s + .getExams() + .stream() + .anyMatch(e -> e.getType() == Exam.Type.ENGLISH)) + .collect(Collectors.toList()); } //Delimiter: ',' @Override public List getExamSumAndRatingForEachStudent() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository.findAll().stream().map(student -> + String.join( + ",", + student.getExams().stream().map(exam -> exam.getScore()).reduce(0.0, (a, v) -> a + v).toString(), + Double.toString(student.getRating()), + student.getName() + ) + ).collect(Collectors.toList()); } @Override public Student findStudentWithMaxAvgExamRating() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .max((a, b) -> { + double r1 = a + .getExams() + .stream() + .mapToDouble(Exam::getScore) + .average() + .orElse(0.); + double r2 = b + .getExams() + .stream() + .mapToDouble(Exam::getScore) + .average() + .orElse(0.); + return Double.compare(r1, r2); + }) + .orElse(studentRepository.findAll().get(0)); } @Override public List findStudentsWhoTakeEngExamWith11RatingOrMore() { - throw new UnsupportedOperationException("Need to make implementation"); + return this.studentRepository + .findAll() + .stream() + .filter(student -> student.getExams().size() > 0) + .filter(student -> student.getRating() >= 11) + .collect(Collectors.toList()); } public StudentRepository getStudentRepository() { From 656cc4e837744d8f3e89c030ba192a3342fae6f3 Mon Sep 17 00:00:00 2001 From: "@dimanadko" Date: Fri, 13 Dec 2019 11:31:47 +0200 Subject: [PATCH 2/2] fixup! feat: implement lab --- src/main/java/com/kpi/fict/DefaultStudentService.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index 8723623..b37d799 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -1,8 +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.List; +import java.util.stream.Collectors; + + import java.util.List; public class DefaultStudentService implements StudentService {