首页 > 解决方案 > 仅当参数不为空时才使用流过滤器

问题描述

假设我有课:

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 过滤器?我知道我可以在过滤之前检查参数是否不为空,但是我必须为每个场合设置不同的过滤配置,我不希望这样。

标签: javajava-stream

解决方案


您可以尝试如下,

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)));
}

推荐阅读