news 2025/12/25 5:06:29

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/23 18:15:22

nodejs+vue超能驾校线上学习管理系统的设计与实现_82fsoq6e

文章目录具体实现截图主要技术与实现手段关于我本系统开发思路java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 同行可拿货,招校园代理 nodejsVue超能驾校线上学习管理系统的设计与实现_82fsoq6…

作者头像 李华
网站建设 2025/12/19 9:07:10

set_exception_handler的工作流程的庖丁解牛

set_exception_handler() 是 PHP 中用于捕获未被捕获的异常&#xff08;uncaught exceptions&#xff09; 的核心机制。它的存在使得我们可以在异常“逃逸”出整个调用栈、导致脚本致命终止前&#xff0c;介入处理、记录日志、返回友好错误页面。一、核心定义&#xff1a;它做什…

作者头像 李华
网站建设 2025/12/19 9:06:30

vue和springboot框架开发的幼儿园管理系统_xfxm3eqe

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

作者头像 李华
网站建设 2025/12/19 9:03:03

OpenBB:开启金融数据开源新纪元,技术革新引领未来投资风向

摘要&#xff1a; 在金融科技日新月异的今天&#xff0c;OpenBB作为首个开源的金融数据平台&#xff0c;正以颠覆性的姿态重塑金融数据分析的格局。本文深入剖析OpenBB的技术架构、数据集成能力、AI智能应用以及其对企业级用户的创新贡献&#xff0c;旨在为金融分析师、量化交易…

作者头像 李华
网站建设 2025/12/24 5:41:44

计算机毕设java代驾服务 基于Java的智能代驾服务平台设计与实现 Java驱动的代驾服务管理系统开发

计算机毕设java代驾服务jfesz9&#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着信息技术的飞速发展&#xff0c;代驾服务行业迎来了新的机遇与挑战。传统的代驾服务管理方式因…

作者头像 李华
网站建设 2025/12/24 21:26:10

YOLOv11涨点改进 | 全网独家创新首发、细节涨点篇 | TGRS 2025顶刊 | 引入 Hint 先验特征提示模块,突出潜在目标区域,缓解红外小目标特征丢失,即插即用万能模块,助力高效涨点

一、本文介绍 🔥本文给大家介绍使用 Hint 先验特征提示 思想引入 YOLOv11 目标检测框架,可以在检测前端为网络提供显式的先验提示信息,使模型在特征提取初期就重点关注潜在目标区域,从而缓解小目标在 Backbone 早期下采样过程中易被淹没和丢失的问题。Hint 基于局部对比与…

作者头像 李华