Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.ifmo.rain.simonovich.student;
- import info.kgeorgiy.java.advanced.student.Student;
- import info.kgeorgiy.java.advanced.student.StudentQuery;
- import java.util.*;
- import java.util.function.BinaryOperator;
- import java.util.function.Function;
- import java.util.function.Predicate;
- import java.util.stream.Collectors;
- public class StudentDB implements StudentQuery {
- @Override
- public List<String> getFirstNames(List<Student> students) {
- return getField(students, Student::getFirstName);
- }
- @Override
- public List<String> getLastNames(List<Student> students) {
- return getField(students, Student::getLastName);
- }
- @Override
- public List<String> getGroups(List<Student> students) {
- return getField(students, Student::getGroup);
- }
- @Override
- public List<String> getFullNames(List<Student> students) {
- return getField(students, student ->
- String.join(" ", student.getFirstName(), student.getLastName()));
- }
- private List<String> getField(List<Student> students, Function<Student, String> function) {
- return students.stream().map(function).collect(Collectors.toList());
- }
- @Override
- public Set<String> getDistinctFirstNames(List<Student> students) {
- return students.stream()
- .map(Student::getFirstName)
- .collect(Collectors.toCollection(TreeSet::new));
- }
- @Override
- public String getMinStudentFirstName(List<Student> students) {
- return students.stream()
- .min(Student::compareTo)
- .map(Student::getFirstName)
- .orElse("");
- }
- @Override
- public List<Student> sortStudentsById(Collection<Student> students) {
- return sortStudentsByField(students, Student::compareTo);
- }
- @Override
- public List<Student> sortStudentsByName(Collection<Student> students) {
- return sortStudentsByField(students, Comparator
- .comparing(Student::getLastName, String::compareTo)
- .thenComparing(Student::getFirstName, String::compareTo)
- .thenComparingInt(Student::getId));
- }
- private List<Student> sortStudentsByField(Collection<Student> students, Comparator<Student> comparator) {
- return students.stream().sorted(comparator).collect(Collectors.toList());
- }
- @Override
- public List<Student> findStudentsByFirstName(Collection<Student> students, String s) {
- return findStudentsByField(students,
- student -> student.getFirstName().equals(s));
- }
- @Override
- public List<Student> findStudentsByLastName(Collection<Student> students, String s) {
- return findStudentsByField(students,
- student -> student.getLastName().equals(s));
- }
- @Override
- public List<Student> findStudentsByGroup(Collection<Student> students, String s) {
- return findStudentsByField(students,
- student -> student.getGroup().equals(s));
- }
- private List<Student> findStudentsByField(Collection<Student> students, Predicate<Student> predicate) {
- return sortStudentsByName(students.stream().filter(predicate).collect(Collectors.toList()));
- }
- @Override
- public Map<String, String> findStudentNamesByGroup(Collection<Student> students, String s) {
- return students.stream()
- .filter(student -> student.getGroup().equals(s))
- .collect(Collectors.toMap(Student::getLastName, Student::getFirstName,
- BinaryOperator.minBy(Comparator.naturalOrder())));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement