fork download
  1. import java.time.LocalDate;
  2. import java.util.*;
  3. import java.util.stream.Collectors;
  4.  
  5. class Student {
  6. private Integer id;
  7. private String name;
  8. private LocalDate birthDate;
  9. private List<Double> grades = new ArrayList<>();
  10.  
  11. public Student(String name, LocalDate birthDate, Double... grades) {
  12. this.name = name;
  13. this.birthDate = birthDate;
  14. Collections.addAll(this.grades, grades);
  15. }
  16.  
  17. public List<Double> getGrades() {
  18. return grades;
  19. }
  20.  
  21. public void addGrade(double grade) {
  22. grades.add(grade);
  23. }
  24.  
  25. public LocalDate getBirthDate() {
  26. return birthDate;
  27. }
  28.  
  29. public Integer getId() {
  30. return id;
  31. }
  32.  
  33. public void setId(Integer id) {
  34. this.id = id;
  35. }
  36.  
  37. @Override
  38. public String toString() {
  39. return "Student{" +
  40. "id=" + id +
  41. ", name='" + name + '\'' +
  42. ", birthDate=" + birthDate +
  43. ", grades=" + grades +
  44. '}';
  45. }
  46. }
  47.  
  48. class StudentService {
  49. private Map<Integer, Student> map = new HashMap<>();
  50.  
  51. public void saveOrUpdate(Student student) {
  52. if (student.getId() == null)
  53. student.setId(map.size());
  54. else if (student.getId() >= map.size())
  55. throw new IllegalArgumentException("student id should be <" + map.size());
  56. map.put(student.getId(), student);
  57. }
  58.  
  59. public Student findById(int studentId) {
  60. return map.get(studentId);
  61. }
  62.  
  63. public List<Student> findAllSortedByAge() {
  64. return map.values().stream()
  65. .sorted((s1, s2) -> s2.getBirthDate().compareTo(s1.getBirthDate()))
  66. .collect(Collectors.toList());
  67. }
  68.  
  69. public Double countAvgOfGrades(Student student) {
  70. return student.getGrades().stream()
  71. .mapToDouble(m -> m)
  72. .average()
  73. .orElse(0);
  74. }
  75.  
  76. public List<Student> findAllWithAvgOfGradesLessThen(double avg) {
  77. return map.values().stream()
  78. .filter(s -> countAvgOfGrades(s) < avg)
  79. .collect(Collectors.toList());
  80. }
  81. }
  82.  
  83. public class Main {
  84. public static void main(String[] args) {
  85. StudentService studentService = new StudentService();
  86.  
  87. studentService.saveOrUpdate(new Student("aaaaa",
  88. LocalDate.parse("1993-01-01"), 4.5, 5.0));
  89. studentService.saveOrUpdate(new Student("bbbbb",
  90. LocalDate.parse("1992-01-01"), 5.5, 5.0, 3.0));
  91. studentService.saveOrUpdate(new Student("ccccc",
  92. LocalDate.parse("1994-01-01"), 3.5));
  93.  
  94. Student founded = studentService.findById(0);
  95. System.out.println(founded);
  96. System.out.println(studentService.countAvgOfGrades(founded));
  97.  
  98. System.out.println(studentService.findAllSortedByAge());
  99. System.out.println(studentService.findAllWithAvgOfGradesLessThen(4.0));
  100. }
  101. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:65: error: ')' expected
                .sorted((s1, s2) -> s2.getBirthDate().compareTo(s1.getBirthDate()))
                           ^
Main.java:65: error: illegal start of expression
                .sorted((s1, s2) -> s2.getBirthDate().compareTo(s1.getBirthDate()))
                                  ^
Main.java:65: error: ';' expected
                .sorted((s1, s2) -> s2.getBirthDate().compareTo(s1.getBirthDate()))
                                                                                  ^
Main.java:71: error: illegal start of expression
                .mapToDouble(m -> m)
                                ^
Main.java:78: error: illegal start of expression
                .filter(s -> countAvgOfGrades(s) < avg)
                           ^
5 errors
stdout
Standard output is empty