334. Java Stream API - 正确使用 Java Optional 的七大黄金法则 + 消费方法讲解
文章目录334. Java Stream API - 正确使用 Java Optional 的七大黄金法则 消费方法讲解 如何消费 Optional 的内容✅ ifPresent(ConsumerT)✅ ifPresentOrElse(ConsumerT, Runnable) 七条 Optional 正确使用的黄金法则✅ 规则 #1**绝对不要用 null 表示 Optional 没有值**✅ 规则 #2**除非你非常确定别用 get() 或 orElseThrow()**✅ 规则 #3**尽量避免用 ifPresent() / get() / orElseThrow() 作流程控制**✅ 规则 #4**不要用 Optional 来替代 null 判断**✅ 规则 #5**不要在以下位置使用 Optional**✅ 规则 #6**不要对 Optional 做身份比较或同步操作**✅ 规则 #7**Optional 不是可序列化的对象** 总结口诀便于记忆334. Java Stream API - 正确使用 Java Optional 的七大黄金法则 消费方法讲解 如何消费 Optional 的内容Optional提供了两个很实用的方法可以“消费”它内部的值如果有✅ifPresent(ConsumerT)这个方法的语义是“如果有值就处理它”。就像Stream.forEach()的缩小版。 示例OptionalStringoptionalOptional.of(Hello);optional.ifPresent(value-System.out.println(Value is: value));输出Valueis:Hello如果optional是空的啥也不发生。适合做“可有可无的值的处理”。✅ifPresentOrElse(ConsumerT, Runnable)Java 9加入的新方法。 语义是如果有值 → 执行第一个参数Consumer如果没值 → 执行第二个参数Runnable 示例OptionalStringoptionalOptional.empty();optional.ifPresentOrElse(value-System.out.println(Value is: value),()-System.out.println(No value present!));输出Novalue present! 用于在一个地方处理“有”和“无”的两种情况更清晰更优雅。 七条 Optional 正确使用的黄金法则✅ 规则 #1绝对不要用null表示Optional没有值错误做法 ❌OptionalStringoptionalnull;// 千万别这样正确做法 ✅OptionalStringoptionalOptional.empty();// 空的 optional 理由Optional的存在就是为了避免null。如果你用null表示Optional反而制造了更大的风险✅ 规则 #2除非你非常确定别用get()或orElseThrow()错误用法风险巨大❌Stringvalueoptional.get();// 如果是 empty就抛异常更安全的做法 ✅optional.ifPresent(val-System.out.println(Found: val));或者配合orElse()、orElseGet()Stringvalueoptional.orElse(default);⚠️ 仅在你百分之百确信Optional 一定有值的地方才使用get()或orElseThrow()。✅ 规则 #3尽量避免用ifPresent()/get()/orElseThrow()作流程控制 不推荐的ifPresent else模式if(optional.isPresent()){doSomething(optional.get());}else{doSomethingElse();} 更推荐optional.ifPresentOrElse(this::doSomething,this::doSomethingElse);更函数式、更现代化、更清晰。✅ 规则 #4不要用Optional来替代null判断错误使用 ❌OptionalStringoptionalOptional.ofNullable(name);if(optional.isPresent()){// do something}更直接做法 ✅if(name!null){// do something}Optional是为了作为方法返回值的契约不是为了你写if判断时图省事。✅ 规则 #5不要在以下位置使用 Optional❌ 错误用法原因Optional作为字段不序列化且使用成本高Optional作为方法参数调用者很不方便传入Optional放在集合中组合复杂度高性能低Optional做为Map值造成空值和逻辑判断的双重复杂度正确做法 ✅方法参数用Nullable或javadoc说明字段用普通引用 文档约定✅ 规则 #6不要对 Optional 做身份比较或同步操作错误示例 ❌if(optional1optional2){...}// 引用比较没有意义更正确做法 ✅if(optional1.equals(optional2)){...}同步也是危险的synchronized(optional){...}// 千万别这么写原因Optional 是值对象不该参与同步、锁等“身份敏感操作”。✅ 规则 #7**Optional不是可序列化的对象**在 Java 的设计中Optional明确不是Serializable。因此不能用于网络传输对象存储结构JSON序列化替代方法 ✅使用null 文档说明自定义 Optional 类型并实现Serializable仅在必要场景下 总结口诀便于记忆 可选非空不用 null 拿值之前先判断✋ 少用 get多用 map 不用 Optional 做成员 不要同步或比身份。

相关新闻

供应链的有效管理,BI 分析指标有哪些

供应链的有效管理,BI 分析指标有哪些

对于企业而言,供应链是一个很复杂的、体系化的生态系统,从原材料、到供应商、到生产、仓库、物流,最后到达经销商或者最终客户那里,这个链条很长。相关的分析指标也有很多,在这些指标里面也有非常多可以扩展、延申的内…

2026/7/3 14:18:19 阅读更多 →
YOLO26涨点改进| CVPR 2026 | 全网创新首发、Conv卷积改进篇 | 引入LFEB局部特征提取模块,提升模型对局部纹理和细节的敏感度,利用多尺度特征提取,提高目标边界的准确性,有效涨点

YOLO26涨点改进| CVPR 2026 | 全网创新首发、Conv卷积改进篇 | 引入LFEB局部特征提取模块,提升模型对局部纹理和细节的敏感度,利用多尺度特征提取,提高目标边界的准确性,有效涨点

一、本文介绍 🔥本文给大家介绍利用LFEB局部特征提取模块改进YOLO26网络模型,可以显著提升模型对局部纹理和细节的敏感度,特别是在复杂场景下的目标识别。通过多尺度的局部特征提取,LFEB模块能更好地保留图像中的细节信息,从而提高目标边界的准确性和分类精度。这种增强…

2026/7/4 14:43:55 阅读更多 →
必收藏|大模型岗位真相曝光!Java/C++/前端等程序员卷对方向了吗?

必收藏|大模型岗位真相曝光!Java/C++/前端等程序员卷对方向了吗?

这两年大模型的热度堪称现象级,无论是深耕后端的Java、C开发者,专注用户界面的前端工程师,还是从事数据处理、架构设计的技术人,几乎都在往大模型领域靠拢,卷度直接拉满! 与此同时,后台也收到了…

2026/5/17 4:09:26 阅读更多 →

最新新闻

【Java毕业设计】基于 JavaWeb 的公司人事档案运维管理系统的设计与实现 企业员工信息录入与人事台账管理系统(源码+文档+远程调试,全bao定制等)

【Java毕业设计】基于 JavaWeb 的公司人事档案运维管理系统的设计与实现 企业员工信息录入与人事台账管理系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/5 2:06:32 阅读更多 →
云原生 AI 模型灰度:别把新模型一次性推给所有流量

云原生 AI 模型灰度:别把新模型一次性推给所有流量

云原生 AI 模型灰度:别把新模型一次性推给所有流量 一、模型灰度比普通服务更需要谨慎 普通服务灰度主要关注错误率、延迟和资源。AI 模型灰度还要关注答案质量、引用准确性、成本变化和用户反馈。新模型接口兼容,不代表业务效果一定更好。 模型上线如…

2026/7/5 2:06:32 阅读更多 →
2026 优质 AI 写小说软件盘点,长篇连载 AI 创作工具完整推荐

2026 优质 AI 写小说软件盘点,长篇连载 AI 创作工具完整推荐

随着人工智能技术持续落地文创领域,AI 辅助写作逐步成为网文作者、传统文学创作者、编剧以及非虚构书籍撰稿人的日常创作方式。当下市场涌现出多款主打 AI 智能写作的工具产品,各类产品在功能侧重、技术架构、服务定价、适配创作题材上分化明显&#xff…

2026/7/5 2:04:31 阅读更多 →
Python async 超时树:每个 await 都要知道自己的时间预算

Python async 超时树:每个 await 都要知道自己的时间预算

Python async 超时树:每个 await 都要知道自己的时间预算 一、深度引言与场景痛点 异步 RAG 或 Agent 服务里,一个请求会经过鉴权、检索、重排、工具调用、模型生成、日志写入。很多代码只在最外层设置总超时,例如 30 秒。问题是,…

2026/7/5 2:02:31 阅读更多 →
AI 推理 KV Cache 淘汰:别让长会话吃掉所有显存

AI 推理 KV Cache 淘汰:别让长会话吃掉所有显存

AI 推理 KV Cache 淘汰:别让长会话吃掉所有显存 一、KV Cache 是吞吐的朋友,也是显存的敌人 自回归模型推理里,KV Cache 可以避免重复计算历史 token,是流式输出性能的基础。但 KV Cache 会随着上下文长度和并发数增长&#xff0c…

2026/7/5 2:02:31 阅读更多 →
Linux groupdel命令详解|用户组删除、主组报错解决、强制删除实战教程

Linux groupdel命令详解|用户组删除、主组报错解决、强制删除实战教程

1. 命令简介groupdel 命令用于从 Linux 系统中删除指定的工作组(用户组)。该命令会修改系统文件 /etc/group 和 /etc/gshadow,移除对应的组记录。需要注意的是,如果待删除的组中仍有用户将其作为主组(primary group&am…

2026/7/5 1:58:29 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻