From f7d068a801c8ea7765ae745026cc3df52de3f8ab Mon Sep 17 00:00:00 2001 From: kowalski0805 Date: Thu, 5 Dec 2019 18:22:31 +0200 Subject: [PATCH 1/4] Implement tasks methods --- .../com/kpi/fict/DefaultStudentService.java | 87 +++++++++++++++++-- 1 file changed, 81 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index 4499550..c6cc416 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.Comparator; import java.util.List; +import java.util.stream.Collectors; public class DefaultStudentService implements StudentService { private StudentRepository studentRepository; @@ -14,28 +17,100 @@ public DefaultStudentService(StudentRepository studentRepository) { @Override public List findStudentsWithTwoExams() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository.findAll().stream().filter(student -> student.getExams().size() == 2).collect(Collectors.toList()); } @Override public List findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { - throw new UnsupportedOperationException("Need to make implementation"); + List students = studentRepository.findAll(); + List mathExams = students + .stream() + .map(student -> + student.getExams().stream().filter(exam -> exam.getType() == Exam.Type.MATH).findFirst() + ) + .filter(exam -> exam.isPresent()) + .map(exam -> exam.get()) + .collect(Collectors.toList()); + + List mathScores = mathExams.stream().map(exam -> exam.getScore()).collect(Collectors.toList()); + + Double mathAvg = mathScores.stream().reduce(0.0, (acc, val) -> acc + val / mathScores.size()); + + return students.stream().filter(student -> + student + .getExams() + .stream() + .filter(exam -> exam.getType() == Exam.Type.MATH) + .findAny() + .get() + .getScore() + > mathAvg + && + student + .getExams() + .stream() + .filter(exam -> exam.getType() == Exam.Type.ENGLISH) + .findAny() + .isPresent() + ).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 + @Override public List findTwoStudentsWithMaxEngRating() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .filter(student -> + student + .getExams() + .stream() + .filter(exam -> exam.getType() == Exam.Type.ENGLISH) + .findAny() + .isPresent() + ) + .sorted(Comparator.comparingDouble(student -> + student + .getExams() + .stream() + .filter(exam -> exam.getType() == Exam.Type.ENGLISH) + .findAny() + .get() + .getScore() + )) + .limit(2) + .collect(Collectors.toList()); } @Override public List findStudentsWhoTakeEngExamWith11RatingOrMore() { - throw new UnsupportedOperationException("Need to make implementation"); + return studentRepository + .findAll() + .stream() + .filter(student -> + student + .getExams() + .stream() + .filter(exam -> exam.getType() == Exam.Type.ENGLISH) + .findAny() + .isPresent() + && + student.getRating() >= 11 + ) + .collect(Collectors.toList()); } public StudentRepository getStudentRepository() { From 459f19da2cb72f04737d4c872f192ea41a6d54c1 Mon Sep 17 00:00:00 2001 From: kowalski0805 Date: Thu, 5 Dec 2019 18:49:34 +0200 Subject: [PATCH 2/4] Add .orElse() method and fix String.join arguments --- src/main/java/com/kpi/fict/DefaultStudentService.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index c6cc416..bb7375f 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -42,7 +42,7 @@ public List findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { .stream() .filter(exam -> exam.getType() == Exam.Type.MATH) .findAny() - .get() + .orElse(new Exam(Exam.Type.MATH, 0)) .getScore() > mathAvg && @@ -60,10 +60,9 @@ public List findStudentsWithMathRatingMoreThanAvgAndTakeEngExam() { public List getExamSumAndRatingForEachStudent() { return studentRepository.findAll().stream().map(student -> String.join( - student.getExams().stream().map(exam -> exam.getScore()).reduce(0.0, (a, v) -> a + v).toString(), ",", + student.getExams().stream().map(exam -> exam.getScore()).reduce(0.0, (a, v) -> a + v).toString(), Double.toString(student.getRating()), - ",", student.getName() ) ).collect(Collectors.toList()); @@ -88,7 +87,7 @@ public List findTwoStudentsWithMaxEngRating() { .stream() .filter(exam -> exam.getType() == Exam.Type.ENGLISH) .findAny() - .get() + .orElse(new Exam(Exam.Type.ENGLISH, 0)) .getScore() )) .limit(2) From 0477cd852f10f904b589d4a2c1386a321602b4b8 Mon Sep 17 00:00:00 2001 From: kowalski0805 Date: Thu, 5 Dec 2019 19:09:17 +0200 Subject: [PATCH 3/4] Reverse sort order --- src/main/java/com/kpi/fict/DefaultStudentService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index bb7375f..a5b1f0e 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -81,7 +81,7 @@ public List findTwoStudentsWithMaxEngRating() { .findAny() .isPresent() ) - .sorted(Comparator.comparingDouble(student -> + .sorted(Comparator.comparing(student -> student .getExams() .stream() @@ -89,7 +89,7 @@ public List findTwoStudentsWithMaxEngRating() { .findAny() .orElse(new Exam(Exam.Type.ENGLISH, 0)) .getScore() - )) + , Comparator.reverseOrder())) .limit(2) .collect(Collectors.toList()); } From 0ed887d8862ea59de91e29ff304d1730b8a54908 Mon Sep 17 00:00:00 2001 From: kowalski0805 Date: Thu, 5 Dec 2019 19:16:27 +0200 Subject: [PATCH 4/4] Change result elements order --- src/main/java/com/kpi/fict/DefaultStudentService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/kpi/fict/DefaultStudentService.java b/src/main/java/com/kpi/fict/DefaultStudentService.java index a5b1f0e..5de6444 100644 --- a/src/main/java/com/kpi/fict/DefaultStudentService.java +++ b/src/main/java/com/kpi/fict/DefaultStudentService.java @@ -91,6 +91,7 @@ public List findTwoStudentsWithMaxEngRating() { .getScore() , Comparator.reverseOrder())) .limit(2) + .sorted(Comparator.comparing(Student::getName)) .collect(Collectors.toList()); }