You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 00:02:27