【Java新特性揭秘】Optional类,告别NullPointerException的神器!

5分钟搞定PaddleOCR PP-OCRv5环境搭建:从安装到第一个识别Demo 本文提供了一份详细的PaddleOCR PP-OCRv5环境搭建与快速入门指南。通过清晰的步骤,指导读者在5分钟内完成从创建Python虚拟环境、安装PaddlePaddle框架和PaddleOCR库,到编写并运行第一个OCR识别Demo的全过程,帮助开发者快速体验最新的PP-OCRv5模型的文字识别能力。 阅读详情

Java 8引入了Optional类,这是一个可以包含或不包含非空值的容器对象。它主要用于避免显式的null检查,从而减少空指针异常(NullPointerException)的发生。

创建Optional对象

  1. 使用Optional.of(): 如果确定值不为null,可以使用此方法。如果传入null,会抛出NullPointerException。

    Optional<String> optional = Optional.of("Hello");
    
  2. 使用Optional.ofNullable(): 允许传入null值。如果值为null,则创建一个空的Optional对象。

    Optional<String> optional = Optional.ofNullable(null);
    
  3. 使用Optional.empty(): 创建一个空的Optional对象。

    Optional<String> optional = Optional.empty();
    

访问Optional中的值

  1. 使用isPresent()和get(): isPresent()用于检查是否有值,get()用于获取值。注意,直接调用get()在没有值的情况下会抛出NoSuchElementException。

    if (optional.isPresent()) {
        System.out.println(optional.get());
    }
    
  2. 使用ifPresent(): 如果值存在,执行给定的操作。

    optional.ifPresent(value -> System.out.println(value));
    
  3. 使用orElse()和orElseGet(): 如果值存在,返回该值;否则,返回默认值。orElseGet()接受一个Supplier接口,只有在需要时才会计算默认值。

    String value = optional.orElse("Default Value");
    String value2 = optional.orElseGet(() -> "Computed Default Value");
    
  4. 使用orElseThrow(): 如果值存在,返回该值;否则,抛出由指定的Supplier生成的异常。

    String value = optional.orElseThrow(() -> new IllegalStateException("Value is not present"));
    

转换Optional中的值

  1. 使用map(): 如果值存在,应用提供的函数并返回一个新的Optional对象。

    Optional<Integer> length = optional.map(String::length);
    
  2. 使用flatMap(): 类似于map(),但要求返回值必须是Optional类型。

    Optional<Integer> length = optional.flatMap(value -> Optional.of(value.length()));
    

过滤Optional中的值

  1. 使用filter(): 如果值存在并且满足提供的谓词条件,返回包含该值的Optional对象;否则,返回一个空的Optional对象。
    Optional<String> filtered = optional.filter(value -> value.startsWith("H"));
    

示例代码

下面是一个综合示例,展示了如何使用Optional类:

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        // 创建一个包含非空值的Optional对象
        Optional<String> optional = Optional.of("Hello, World!");
        
        // 检查值是否存在
        if (optional.isPresent()) {
            System.out.println("Value is present: " + optional.get());
        } else {
            System.out.println("Value is not present");
        }
        
        // 使用ifPresent()方法
        optional.ifPresent(value -> System.out.println("Value using ifPresent: " + value));
        
        // 使用orElse()方法
        String defaultValue = optional.orElse("Default Value");
        System.out.println("Value using orElse: " + defaultValue);
        
        // 使用orElseGet()方法
        String computedValue = optional.orElseGet(() -> "Computed Default Value");
        System.out.println("Value using orElseGet: " + computedValue);
        
        // 使用orElseThrow()方法
        try {
            String value = optional.orElseThrow(() -> new IllegalStateException("Value is not present"));
            System.out.println("Value using orElseThrow: " + value);
        } catch (IllegalStateException e) {
            System.out.println(e.getMessage());
        }
        
        // 使用map()方法
        Optional<Integer> length = optional.map(String::length);
        length.ifPresent(len -> System.out.println("Length of the string: " + len));
        
        // 使用flatMap()方法
        Optional<Integer> flatMappedLength = optional.flatMap(value -> Optional.of(value.length()));
        flatMappedLength.ifPresent(len -> System.out.println("Flat mapped length: " + len));
        
        // 使用filter()方法
        Optional<String> filtered = optional.filter(value -> value.contains("World"));
        filtered.ifPresent(val -> System.out.println("Filtered value: " + val));
    }
}
输出:
Value is present: Hello, World!
Value using ifPresent: Hello, World!
Value using orElse: Hello, World!
Value using orElseGet: Hello, World!
Value using orElseThrow: Hello, World!
Length of the string: 13
Flat mapped length: 13
Filtered value: Hello, World!

通过这些方法,你可以更优雅地处理可能为null的值,减少空指针异常的风险,提高代码的可读性和健壮性。

50、压电微泵与技术设备驱动的研究分析 本文研究了压电微泵在弹性微通道中的流体流动特性及技术设备驱动的振动行为。通过建立轴对称流固耦合模型,利用FreeFem++进行数值模拟,分析了不同数量压电致动器和频率对微泵流量的影响,发现多个致动器按特定时序压缩可产生净正向流量,并提出了稳态流量的近似解析公式。同时,针对技术设备驱动系统,探讨了周期性负载引起的强迫振动特性,明确了共振条件及影响因素,并比较了主动、被动和优化设计等振动控制策略。最后展望了实验验证、多物理场耦合与智能控制等未来研究方向,为相关设备的优化设计与高效运行提供了理论支持。 阅读详情

相关推荐

Matlab实战:从零搭建弹道导弹六自由度仿真模型(附完整代码)

本文详细介绍了如何使用Matlab从零搭建弹道导弹六自由度仿真模型,涵盖仿真环境配置、核心运动方程实现、气动力建模及仿真结果分析。通过完整代码示例,帮助读者掌握弹道导弹六自由度仿真的关键技术,适用于航空航天工程和复杂系统建模领域。

x8y9z0的博客 947

Java开发全栈指南:从基础到微服务架构实践

Java作为面向对象编程语言的代表,凭借其跨平台特性和强大的生态系统,在企业级开发中占据重要地位。从JVM原理到集合框架设计,Java通过严谨的类型系统和内存管理机制,为构建高可靠性系统提供了基础保障。在微服务架构和云原生趋势下,Spring Boot与JDK新特性(如虚拟线程)的结合,使Java在分布式系统和性能敏感场景中持续发挥价值。通过合理运用IntelliJ IDEA等开发工具和JUnit测试框架,开发者可以高效实现从环境搭建到CI/CD部署的全流程开发。本文特别针对OpenJDK和Spring C

weixin_33743248的博客 375

【scp】Windows 下scp报错 bad permissions

Windows 下使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决 C:\Users\Administrator>scp -P 66666 D:\1111.pdf zzd@58.213.45.xx:/home/zzd/ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING:...

走在搬砖的路上! 4154

2.Nullcheck of value previously dereferenced

[hyddd的FindBugs分析记录][M C RCN] Nullcheck of value previously dereferenced [ M C RCN] Nullcheck of value previously dereferenced [RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE] A value...

hty68024352的专栏 4918

COSMO-RS理论:流体相热力学预测的核心模型与技术突破

摘要:COSMO-RS模型通过量子化学计算分子表面电荷分布,实现了从微观量子尺度到宏观化工过程的热力学预测。该模型基于介电连续介质理论,将分子表面片段化处理,通过σ-剖面描述电荷分布,并计算片段间的静电失配能和氢键能。其核心算法通过自洽化学势方程求解活度系数,克服了传统模型依赖实验参数的局限。随着技术进步,模型引入了高阶描述符和色散力修正,提升了预测精度。在药物研发、化工分离等领域广泛应用,但仍存在对长程有序结构预测不足等局限性。该模型为复杂体系的热力学性质预测提供了重要理论工具。

ASKCOS博客 973

新手必看:C#调用YOLO模型完成图片/视频目标检测(上位机版)

新手学习C#调用YOLO模型,核心是先把基础流程跑通,再逐步优化。图片检测是基础,视频检测就是在图片的基础上加循环和线程,而上位机的实际项目,就是在这个基础上适配工业硬件和业务需求。本文的代码都是新手能直接复制运行的,如果你运行时遇到问题,先检查前期准备是否到位,再看避坑指南。记住,新手别追求一步到位,先实现功能,再慢慢优化性能和界面。等你能熟练调用YOLO模型后,再去研究模型训练、量化优化等进阶内容,会轻松很多。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 987

Findbugs中常见错误的分类和原因分析

Findbugs 中的常用的bug pattern配置 Bug pattern description Bad practice 不好的习惯 Correctness 代码的正确性 Dodgy 小问题 Malicious code vulnerability 恶意代码 Internationalization 国际化问题 Performance 性能问题 Security 安全性问题 Multithreaded currectness 线程问题 Experrim

devin_xin的博客 7338

131、高通骁龙影像平台总览:Spectra ISP 各代架构演进与特性对比

摘要:本文深入分析了高通骁龙Spectra ISP从250到780代的架构演进与技术痛点,揭示了各代关键改进与隐藏问题。重点剖析了双ISP带宽分配、AI ISP黑盒决策、温度控制等实战问题,并给出具体解决方案(如寄存器配置、QoS调整等)。文章强调工程师需平衡带宽、功耗与画质的三角关系,建议调试时先关闭AI模块建立基线,关注统计引擎配置,并建立温度监控机制。最后指出理解架构局限比追求完美设计更重要,需要针对不同场景找到合适的妥协方案。(148字)

sundong_81的博客 207

findbugs问题解决

1)NP_ALWAYS_NULL: Null pointer dereference A null pointer is dereferenced here. This will lead to a NullPointerException when the code is executed. 解释:有一条语句的分支,如果执行该分支,则将引用空值,这将在执行代码时生成NullPointerE...

本然233的博客 4629

基于STM32设计的掌上游戏机(运行NES游戏模拟器)详细开发过程

利用STM32单片机移植NES游戏模拟器,完成NES游戏开发,可以玩标准的NES游戏,已测试超级玛丽、魂斗罗之类的都可以正常运行。

4万+

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

工作中使用Optional过滤出符合条件的数据

【代码】工作中使用Optional过滤出符合条件的数据。

Java_Fly1的博客 368

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

FindBugs 常见错误类型整理

转载自:https://zdran.com/20180717.html 1.Dodgy code 糟糕的代码 1.1 Misuse of static fields 滥用静态字段 Write to static field from instance method 由于在方法内对静态属性进行赋值操作 class A{ private static int count; ...

jayson1001的博客 9442

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

使用Optional解决 if (obj != null) 判空

Optional使用

竹林幽深 716

JDK8 开发最常用的新特性

JDK8 是 Java 史上的版本,核心新特性。

woniu_buhui_fei的博客 414

答应我, 不要再用 if (obj != null) 判空了

今日推荐最适合晚上睡不着看的 8 个网站,建议收藏哦23 种设计模式的通俗解释,虽然有点污,但是秒懂 请立即卸载这款 IDEA 插件! SQL自动检查神器,再也不用担心SQL出错了,自动补全、回滚等功能大全 最新 955 不加班的公司名单(2022版)1. 前言相信不少小伙伴已经被java的NPE(Null Pointer Exception)所谓的空指针异常搞的头...

好好学java 177

25万+字干货|Java面试85题图解版:43道高频真题速查手册(八股+源码双吃透)

本文为25万字超全干货的Java面试85题图解完整版手册,精选43道大厂高频面试真题,摒弃传统死记硬背八股文模式,采用三句标准答案、生活化场景比喻、核心结构图解的方式,通俗讲解Java基础、并发、JVM、数据库、框架等核心考点。每道题目配套实战避坑指南、面试官高频追问与源码解析,实现八股背诵与底层源码双向吃透,适合校招、社招程序员考前速刷、长期复盘,轻松攻克Java面试重难点。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 795

从代码片段到完整应用:多语言移动开发架构与工程化实战

在现代软件开发中,MVVM架构模式是实现关注点分离、提升代码可维护性的核心设计思想。其原理在于清晰划分Model(数据与业务逻辑)、View(用户界面)和ViewModel(展示逻辑与状态管理)三层职责,通过数据绑定或响应式编程实现单向数据流。这一模式的技术价值在于显著增强了应用的可测试性、团队协作效率以及长期迭代的健壮性。无论是原生开发还是跨平台场景,结合状态管理方案(如Kotlin Coroutines的StateFlow、Swift的Combine或Flutter的Provider)能有效应对复杂UI

chuchen7021的博客 717

findbugs 出错类型及对应解释

 findbugs 出错类型及对应解释 第一弹 1、Dead store to local variable 本地变量存储了闲置不用的对象 举例: List accountCoList = new ArrayList(); 我们为accountCoList新建了一个对象,但是程序的后面并没有使用这个这个新建对象。 建议改为: List accountCoList = null

09的专栏 2万+

Optional类的filter方法

filter方法可对Optional内对象进行过滤。 1. 准备类 public class Staff { String name; Integer age; public Staff(){ } public Staff(String name, Integer age){ this.name = name; this.age = age; }..

DataB的博客 7209

Java 8 Optional类:避免NullPointerException的利器

java.util.Optional是Java 8引入的一个容器类,目的是解决NullPointerException的问题,它可以保存的值,代表这个值存在,或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。

单枪匹码 1856

Optional类:避免NullPointerException

Optional类是Java 8中引入的一个容器类,用来包含或不包含非null对象。它的设计目的是为了提供一种更清晰、更安全的方式来处理可能为null的对象,从而避免。以下是Optional。

weixin_73060959的博客 737

Java中的Optional类:简化空值检查和避免空指针

除了基本用法,Optional类还提供了其他一些有用的方法,例如map()、filter()、flatMap()等。我们可以使用Optional.of()方法来创建一个包含非空值的Optional实例,或者使用Optional.empty()方法来创建一个空的Optional实例。在上面的代码中,我们首先判断Optional实例是否包含值,然后使用get()方法访问值。另外,我们还可以使用orElse()方法来获取Optional实例中的值,如果值不存在,则返回一个指定的默认值。否则返回提供的默认值。

相当rapper的程序员 509

Optional(创建、过滤、判断、数据转换)、函数式接口、方法引用(由浅入深的函数式编程③)

Optional(创建、过滤、判断、数据转换)、函数式接口、方法引用(由浅入深的函数式编程③)

soulwirter的博客 696

代码审查常见代码质量问题

配套的Bug解释模式 为了有针对性的使用这个工具,减少bug的误报,提高使用效率,我们选择了10个左右的bug模式,下面就是对这10个模式的解释。 这些bug可能会引起程序的性能或逻辑问题. 需要说明的是,findbugs能检测的bug pattern远不仅于此,甚至可以定制自己的探测器,因此,这个文档会不断扩充,同时,也欢迎大家不断探索和分享使用实践. 大的分类主要包括以

邢超的博客 2万+

findbugs常见问题

6.1、       ES_COMPARING_PARAMETER_STRING_WITH_EQ      ES: Comparison of String parameter using == or != (ES_COMPARING_PARAMETER_STRING_WITH_EQ) This code compares a java.lang.String parameter fo

lihuan6656的博客 5103

Java8 中的真的 Optional 很强大,你用对了吗?

不过,你看到了,这个方法会在值为 null 的时候抛出异常。要避免异常,你可以选择首先验证是否有值:@Test检查是否有值的另一个选择是 ifPresent() 方法。该方法除了执行检查,还接受一个Consumer(消费者) 参数,如果对象不是空的,就对执行传入的 Lambda 表达式:这个例子中,只有 user 用户不为 null 的时候才会执行断言。接下来,我们来看看提供空值的方法。返回默认值Optional 类提供了 API 用以返回对象值,或者在对象为空的时候返回默认值。

2501_90245689的博客 1012
上一篇: 【揭秘】Apache-Commons-Lang3中的元组使用技巧,让你的代码更优雅!
下一篇: Java开发者必知:揭秘String、StringBuffer与StringBuilder的神秘区别!
码农Q!
博客等级 码龄2年 4774粉丝 1136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值