如何用Java 8 Stream过滤schoolname含santa的Student列表
用Java 8 Stream筛选schoolname包含指定字符串的Student对象
没问题,这事儿用Java 8的Stream API完全能搞定,不用写半行if-else。直接给你上可运行的代码,再拆解关键细节:
假设你已经有一个List<Student> studentList,过滤逻辑可以这么写:
import java.util.List; import java.util.stream.Collectors; // 过滤schoolname包含"santa"的学生(忽略大小写,对应SQL LIKE %SANTA%) List<Student> filteredStudents = studentList.stream() // 先排除schoolname为null的对象,避免空指针异常 .filter(student -> student.getSchoolname() != null) // 匹配包含"santa"的字符串,toLowerCase确保大小写不敏感 .filter(student -> student.getSchoolname().toLowerCase().contains("santa")) // 把筛选结果收集成新的List .collect(Collectors.toList());
关键细节拆解:
- 空值防护:第一个
filter必须加上,如果某个Student的schoolname是null,直接调用字符串方法会抛出NullPointerException,这是实际开发中很容易踩的坑。 - 大小写不敏感匹配:用
toLowerCase()把原字符串转成小写,再和小写的"santa"做包含判断,完美对应SQL里LIKE %SANTA%的不区分大小写逻辑。如果你需要严格区分大小写(比如只匹配小写"santa"),去掉toLowerCase()就行:// 严格区分大小写的版本 List<Student> filteredStudents = studentList.stream() .filter(student -> student.getSchoolname() != null && student.getSchoolname().contains("santa")) .collect(Collectors.toList()); - 代码风格选择:上面把两个条件拆成了两个
filter,也可以合并成一个用&&连接的条件,效果完全一致,看你个人代码风格偏好就行。
内容的提问来源于stack exchange,提问作者fmd89
相关产品推荐
相关产品推荐

