Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. package ru.ifmo.rain.simonovich.student;
  2.  
  3. import info.kgeorgiy.java.advanced.student.Student;
  4. import info.kgeorgiy.java.advanced.student.StudentQuery;
  5.  
  6. import java.util.*;
  7. import java.util.function.BinaryOperator;
  8. import java.util.function.Function;
  9. import java.util.function.Predicate;
  10. import java.util.stream.Collectors;
  11.  
  12. public class StudentDB implements StudentQuery {
  13. @Override
  14. public List<String> getFirstNames(List<Student> students) {
  15. return getField(students, Student::getFirstName);
  16. }
  17.  
  18. @Override
  19. public List<String> getLastNames(List<Student> students) {
  20. return getField(students, Student::getLastName);
  21. }
  22.  
  23. @Override
  24. public List<String> getGroups(List<Student> students) {
  25. return getField(students, Student::getGroup);
  26. }
  27.  
  28. @Override
  29. public List<String> getFullNames(List<Student> students) {
  30. return getField(students, student ->
  31. String.join(" ", student.getFirstName(), student.getLastName()));
  32. }
  33.  
  34. private List<String> getField(List<Student> students, Function<Student, String> function) {
  35. return students.stream().map(function).collect(Collectors.toList());
  36. }
  37.  
  38. @Override
  39. public Set<String> getDistinctFirstNames(List<Student> students) {
  40. return students.stream()
  41. .map(Student::getFirstName)
  42. .collect(Collectors.toCollection(TreeSet::new));
  43. }
  44.  
  45. @Override
  46. public String getMinStudentFirstName(List<Student> students) {
  47. return students.stream()
  48. .min(Student::compareTo)
  49. .map(Student::getFirstName)
  50. .orElse("");
  51. }
  52.  
  53. @Override
  54. public List<Student> sortStudentsById(Collection<Student> students) {
  55. return sortStudentsByField(students, Student::compareTo);
  56. }
  57.  
  58. @Override
  59. public List<Student> sortStudentsByName(Collection<Student> students) {
  60. return sortStudentsByField(students, Comparator
  61. .comparing(Student::getLastName, String::compareTo)
  62. .thenComparing(Student::getFirstName, String::compareTo)
  63. .thenComparingInt(Student::getId));
  64. }
  65.  
  66. private List<Student> sortStudentsByField(Collection<Student> students, Comparator<Student> comparator) {
  67. return students.stream().sorted(comparator).collect(Collectors.toList());
  68. }
  69.  
  70. @Override
  71. public List<Student> findStudentsByFirstName(Collection<Student> students, String s) {
  72. return findStudentsByField(students,
  73. student -> student.getFirstName().equals(s));
  74. }
  75.  
  76. @Override
  77. public List<Student> findStudentsByLastName(Collection<Student> students, String s) {
  78. return findStudentsByField(students,
  79. student -> student.getLastName().equals(s));
  80. }
  81.  
  82. @Override
  83. public List<Student> findStudentsByGroup(Collection<Student> students, String s) {
  84. return findStudentsByField(students,
  85. student -> student.getGroup().equals(s));
  86. }
  87.  
  88. private List<Student> findStudentsByField(Collection<Student> students, Predicate<Student> predicate) {
  89. return sortStudentsByName(students.stream().filter(predicate).collect(Collectors.toList()));
  90. }
  91.  
  92. @Override
  93. public Map<String, String> findStudentNamesByGroup(Collection<Student> students, String s) {
  94. return students.stream()
  95. .filter(student -> student.getGroup().equals(s))
  96. .collect(Collectors.toMap(Student::getLastName, Student::getFirstName,
  97. BinaryOperator.minBy(Comparator.naturalOrder())));
  98. }
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement