news 2026/6/10 16:14:53

274. Java Stream API - 过滤操作(filter):筛选你想要的数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
274. Java Stream API - 过滤操作(filter):筛选你想要的数据

文章目录

  • 274. Java Stream API - 过滤操作(filter):筛选你想要的数据
      • 🧠 什么是过滤(Filtering)?
    • ✅ 基本示例:过滤字符串长度为 3 的元素
    • 🧪 扩展示例:直接过滤字符串本身
    • 🤖 filter 可用于所有类型的流,包括原始类型流
    • 💬 提示与最佳实践
    • 🧠 小结
      • 🎓 练习题建议(课堂可选)

274. Java Stream API - 过滤操作(filter):筛选你想要的数据

🧠 什么是过滤(Filtering)?

Java Stream中,**过滤(filter)*的作用就是*排除不满足条件的元素,只保留你感兴趣的部分。

它接收一个Predicate(返回truefalse的布尔函数),来判断每个元素是否应该保留。


✅ 基本示例:过滤字符串长度为 3 的元素

List<String>strings=List.of("one","two","three","four");longcount=strings.stream().map(String::length).filter(length->length==3).count();System.out.println("count = "+count);

📌 输出:

count=2

🎯 说明:

  • map(String::length):将字符串映射为它们的长度
  • filter(length -> length == 3):只保留长度为 3 的值
  • count():统计最终保留下来的元素个数,是一个终端操作

📢count()返回的是long类型 —— 比int更大,因此可以统计极大量的元素,比 ArrayList 所能存储的数量还多!


🧪 扩展示例:直接过滤字符串本身

你也可以不使用map(),而是直接在字符串上使用filter()

List<String>strings=List.of("one","two","three","four");List<String>filtered=strings.stream().filter(s->s.length()==3).toList();System.out.println("filtered = "+filtered);

📌 输出:

filtered=[one,two]

💡 你可以看到,这种写法更直观,因为我们直接在原始元素(字符串)上应用判断逻辑。


🤖 filter 可用于所有类型的流,包括原始类型流

也就是说,它不仅支持Stream<T>,还支持:

  • IntStream
  • LongStream
  • DoubleStream

✅ 示例:过滤整数列表中大于 10 的数字

List<Integer>numbers=List.of(5,8,13,21,3);List<Integer>result=numbers.stream().filter(n->n>10).toList();System.out.println("result = "+result);

输出:

result=[13,21]

💬 提示与最佳实践

场景推荐操作
保留满足条件的元素使用filter(predicate)
想要直接数数量.count()(返回 long)
需要获得新集合.toList().toSet()
想对数值进行统计或运算推荐结合mapToInt()等一起使用

🧠 小结

  • filter()是一个中间操作,返回的是一个新流(并不立即执行)
  • 它只保留返回值为true的元素
  • 搭配.count()可以快速统计满足条件的元素数量
  • 可用于对象流与原始类型流
  • 保持函数式风格:尽量避免在filter()中写带副作用的代码

🎓 练习题建议(课堂可选)

问题 1:以下代码输出什么?

List<String>data=List.of("apple","bat","cat","dog","elephant");longcount=data.stream().filter(s->s.length()<=3).count();System.out.println(count);

答案:3("bat", "cat", "dog")

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:07:22

【光子AI:创业计划书-模板案例参考 1 】光子AI 科技有限公司

【创业计划书-模板案例参考】光子AI科技有限公司 文章目录 【创业计划书-模板案例参考】光子AI科技有限公司 ============================================ 光子 AI 科技有限公司(Photon AI Technology Co., Ltd.) 完整创业战略方案 一、公司定位与战略基础 1.1 公司使命(M…

作者头像 李华
网站建设 2026/6/10 14:03:38

设计模式:观察者模式的应用场景。

设计模式之观察者模式:构建响应式软件系统的艺术 关键词 观察者模式, 设计模式, 行为型模式, 响应式编程, 事件驱动, 松耦合, 发布-订阅 摘要 在当今快速变化的软件世界中,构建能够及时响应状态变化的系统变得越来越重要。观察者模式作为一种经典的行为型设计模式,为对象…

作者头像 李华
网站建设 2026/6/10 14:03:25

实战派SQL性能优化:从语法层面攻克项目中的性能瓶颈

在实际项目开发中&#xff0c;慢SQL是数据库性能瓶颈的“重灾区”——一个写得不好的SQL语句&#xff0c;可能让原本配置优良的数据库服务器CPU飙升至100%&#xff0c;接口响应时间从毫秒级变成秒级&#xff0c;甚至引发数据库连接池耗尽、系统雪崩。很多人误以为SQL性能优化是…

作者头像 李华
网站建设 2026/6/10 14:39:56

【读书笔记】《美国四百年》

《美国四百年》解读笔记 本书作者布斯里尼瓦桑&#xff08;Bhu Srinivasan&#xff09;从经济和创业视角解读美国400年历史&#xff08;从1620年“五月花号”算起&#xff09;&#xff0c;强调美国的发展是一系列发明、创新和冒险的过程。樊登在三亚红树林樊登书店分享此书&…

作者头像 李华
网站建设 2026/6/8 9:58:39

【LeetCode】大厂面试算法真题回忆(167)——最小叶子节点

📌 题目描述 给定一个按二叉树数组结构存储的正整数数组(-1 表示空节点): 数组的第 0 个元素不使用 根节点存储在下标 1 若节点下标为 n 左子节点:2n 右子节点:2n + 1 要求找到最小叶子节点(值最小的叶子节点),并输出 从根到该节点的路径。 📥 输入示例 示例一…

作者头像 李华