JavaStream API的语法和基本操作
发布时间 - 2026-01-11 00:00:00 点击率:次Java Stream 是一次性管道,执行终端操作后即关闭,重复调用会抛 IllegalStateException;filter 保留元素、map 一对一转换、flatMap 展平嵌套流;需过滤 null 避免 NPE;并行流非万能,受限于数据量、操作状态及 IO 类型。
Stream 是一次性消费的,不能重复调用 collect() 或 forEach()
Java 的 Stream 不是数据容器,而是一次性管道。一旦执行了终端操作(如 collect()、forEach()、count()),流就关闭了。再调用会抛出 java.lang.IllegalStateException: stream has already been operated upon or closed。
- 错误写法:
List
list = Arrays.asList("a", "b"); Stream s = list.
stream();
s.collect(Collectors.toList());
s.forEach(System.out::println); // ❌ 报错 - 正确做法:每次需要新流就重新创建 ——
list.stream().map(...).collect(...),或把中间操作链写完整再执行终端操作 - 调试时别在中间插
forEach()打断流;要用peek():stream.peek(System.out::println).filter(...)
filter()、map()、flatMap() 的关键区别
这三个是最常混用的中间操作,核心差异在「返回值类型」和「是否扁平化」:
-
filter(Predicate:输入) T,输出仍是T,但只保留满足条件的元素(数量 ≤ 原始) -
map(Function:输入) T,输出R,一对一转换(数量不变) -
flatMap(Function:输入>) T,输出Stream,然后自动“展平”一层(适合处理嵌套集合、Optional、字符串转字符流等)
例如把 List 拉平成 >
List,必须用 flatMap:
listOfLists.stream()
.flatMap(innerList -> innerList.stream())
.collect(Collectors.toList());
空集合、null 元素与 Optional 的配合要点
Stream 本身不拒绝 null 元素,但多数终端操作(如 collect())在遇到 null 时可能抛 NullPointerException,尤其在使用 Collectors.toMap() 时键或值为 null 会直接失败。
- 安全过滤 null:
stream.filter(Objects::nonNull) - 避免
toMap()因 key 为 null 失败:stream.filter(Objects::nonNull) .collect(Collectors.toMap( item -> item.getId(), item -> item.getName(), (a, b) -> a // 冲突解决,防止 key 重复 )); - 对可能为空的计算结果,优先用
Optional包裹再进流:Optional.ofNullable(obj).map(...).stream(),比在流里判空更清晰
并行流(parallelStream())不是性能银弹
parallelStream() 底层用的是 ForkJoinPool.commonPool(),看似开箱即用,但实际受多个因素制约:
- 数据量小(比如 计算收益
- 操作有状态(如修改外部变量、使用非线程安全的
ArrayList收集)会导致结果不可预测,必须改用线程安全容器或collect()的三参数重载 - IO 密集型操作(如读文件、发 HTTP 请求)不适合并行流,应考虑
CompletableFuture等异步模型 - 想控制线程池?别用
commonPool(),显式构造ForkJoinPool并用submit()提交任务更可控
真正需要并行时,优先验证单线程瓶颈、确认操作无状态、再压测对比。
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
详解vue.js组件化开发实践
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
教学论文网站制作软件有哪些,写论文用什么软件
?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
JS去除重复并统计数量的实现方法
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
网站制作价目表怎么做,珍爱网婚介费用多少?
网易LOFTER官网链接 老福特网页版登录地址
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
iOS中将个别页面强制横屏其他页面竖屏
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何在Tomcat中配置并部署网站项目?
如何快速搭建安全的FTP站点?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
原生JS获取元素集合的子元素宽度实例
敲碗10年!Mac系列传将迎来「触控与联网」双革新
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何在Windows 2008云服务器安全搭建网站?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
文字头像制作网站推荐软件,醒图能自动配文字吗?
如何在阿里云虚拟主机上快速搭建个人网站?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
大型企业网站制作流程,做网站需要注册公司吗?
如何在VPS电脑上快速搭建网站?
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
香港服务器租用费用高吗?如何避免常见误区?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何将凡科建站内容保存为本地文件?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)


stream();
s.collect(Collectors.toList());
s.forEach(System.out::println); // ❌ 报错