如果给定值不为空,则应用过滤器

时间:2019-04-12 19:33:06

标签: java

我有一个学生对象列表。我想使用Java 8根据某些参数过滤此列表。我的代码就是这样

studentName = "test";

studentsList = students.stream().filter(s -> s.getName().equals(studentName )).collect(Collectors.toList());

但是,如果StudentName不为null,我想应用此过滤器。如果studentName为null,那么我不希望此过滤器起作用。我可以在过滤器中将此StudentName设为可选吗?

1 个答案:

答案 0 :(得分:3)

分两个步骤进行操作:

SELECT t.*
  FROM (       SELECT 'Mike' AS name, 'March' AS month
        UNION  SELECT 'John' AS name, 'April' AS month) AS aux
  JOIN table t ON t.name = aux.name 
              AND t.month = aux.name

或将null检查添加到过滤器本身中:

Stream<Student> studentStream = students.stream();
if (studentName != null) {
    studentStream = studentStream.filter(s -> s.getName().equals(studentName));
}
studentsList = studentStream.collect(Collectors.toList());