Использовать потоковый фильтр, только если параметр не равен NULL - PullRequest
0 голосов
/ 23 апреля 2020

Допустим, у меня есть классы:

public class Student {

    private String firstName;
    private String lastName;
    private int albumNo;
    private List<String> courses;
   ...
}

public class StudentList {
    private List<Student> students;

    public List<Student> filter(String course, String firstName) {
        return students
                .stream()
                .filter(s -> s.getCourses().contains(course))
                .filter(s -> s.getFirsName().equals(firstName))
                .collect(Collectors.toList());
    }
}

Однако существует вероятность, что параметры функции фильтра могут быть пустыми (так как они являются параметрами запроса). Можно ли использовать фильтры Course и FirstName, только если аргументы функции не равны NULL? Я знаю, что мог бы проверить, не являются ли параметры нулевыми, перед фильтрацией, но тогда мне пришлось бы иметь различную конфигурацию фильтрации для каждого случая, и я не хочу этого.

1 Ответ

3 голосов
/ 23 апреля 2020

Вы можете попробовать, как показано ниже,

public List<Student> filter(String course, String firstName) {
    return students
            .stream()
            .filter(s-> filterStudent(s,course, firstName))
            .collect(Collectors.toList());
}

private boolean filterStudent(Student s, String course, String firstName) {
  return (s.getCourses() == null || s.getCourses().contains(course) &&
            (s.getFirsName() == null || s.getFirsName().equals(firstName)));
}
...