news 2026/3/31 11:25:42

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/3/27 17:39:30

GSV6715@ACP#6715产品规格详解及产品应用分享

GSV6715 产品参数详解与应用场景总结一、产品核心定位GSV6715 是由基石酷联&#xff08;GScoolink&#xff09;推出的4 进 1 出混合切换器芯片&#xff0c;主打 HDMI 2.1 与 DisplayPort 1.4 信号的灵活转换&#xff0c;最终输出 HDMI 2.1 信号。芯片集成了基于 RISC-V 架构的嵌…

作者头像 李华
网站建设 2026/3/26 5:21:12

vue和springboot框架开发的影院购票选座管理系统_jnuas46c

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

作者头像 李华
网站建设 2026/3/31 4:07:50

springboot新闻推荐系统(11524)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华