news 2026/4/16 10:47:21

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/4/12 21:45:49

ThingsBoard-修改Android APP应用程序名和描述

APP应用程序名是指在手机桌面上显示的名称&#xff0c;描述是指查看APP时的介绍。 修改APP描述 # \pubspec.yaml name: thingsboard_app --此处为应用包名&#xff0c;更改了要报错 description: Flutter ThingsBoard Mobile Application --更改为 XX科技智能用电系统修改APP名…

作者头像 李华
网站建设 2026/4/15 21:31:40

【读书笔记】《不被定义的年龄》

《不被定义的年龄》书籍分享整理 开篇提醒与引言 这本书基于美国学者近期新兴研究&#xff0c;涉及大量案例&#xff0c;但个体差异大。特别提醒老年听众&#xff1a;应用书中的观点时要量力而行&#xff0c;保护好身体健康。书籍尚未正式出版&#xff0c;讲述者读后大受震撼&a…

作者头像 李华
网站建设 2026/4/14 16:24:40

然然管理系统已开源

大家好&#xff0c;作为一名多年开发者&#xff0c;深知基于主流技术栈搭建一套前后端系统并具有角色权限菜单基础功能还是有一定难度的。在中大型企业里&#xff0c;我们基本专注后端开发、前端开发、大数据开发、数据分析等具体岗位&#xff0c;很少有机会独立做一套系统&…

作者头像 李华
网站建设 2026/4/9 5:50:49

nodejs+vue基于express框架的网吧管理系统_网吧网咖会员上机管理系统eas18u43

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 同行可拿货,招校园代理 nodejsnodejsVue基于express框架的网吧管理系统_网吧网咖…

作者头像 李华
网站建设 2026/4/15 6:07:26

CVE-2025-14729漏洞剖析:CTCMS后台配置模块中的代码注入风险

漏洞概述 CVE-2025-14729是一个中等严重程度的代码注入漏洞&#xff0c;影响CTCMS内容管理系统的2.1.0至2.1.2版本。该漏洞允许攻击者通过操纵特定参数&#xff0c;在服务器上远程执行任意代码&#xff0c;从而可能完全控制系统[citation:1]。 技术细节与成因 该漏洞的根源在于…

作者头像 李华