java - 仅当参数不为空时才使用流过滤器
问题描述
假设我有课:
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 过滤器?我知道我可以在过滤之前检查参数是否不为空,但是我必须为每个场合设置不同的过滤配置,我不希望这样。
解决方案
您可以尝试如下,
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)));
}
推荐阅读
- c# - 如何向 mongodb 中的现有记录插入新值?
- ruby - 控制器和交互器错误处理的最佳实践
- amazon-web-services - 增加索引是否会导致 AWS RDS 的写入 IOPS 上升?
- c++ - 如何以更有效的方式判断枚举类值是否在枚举类的指定范围内?
- java - 如何在 Spring Data JPA 中编写以下 SQL 查询?
- android - RecyclerView 在第一个 (4 - 5) 滚动时滞后
- android - PocketSphinx:如何识别关键字后跟动态词?
- java - 从服务中获取价值的启动画面
- angular - 当我选择单选按钮时,Angular-Material 单选按钮数据未绑定
- c# - c# razor generator 编译错误与 NancyFx 项目