首页 > 编程语言 >使用 Java Optional 类

使用 Java Optional 类

时间:2024-06-03 09:33:00浏览次数:22  
标签:Java optional System Value value 使用 println Optional

在Java编程中,我们经常会遇到返回值可能为空的场景。为了避免在使用返回值时出现空指针异常 (NullPointerException),Java 8引入了Optional类。Optional类可以将一个值包装为可选项,明确表示值可能为空。本篇博客将详细介绍Optional类的使用方法,并通过代码示例帮助新人快速理解。

一、什么是 Optional 类?

Optional 类是一个容器类,它可以包含一个非空值,也可以表示值不存在。它的设计初衷是为了减少显式使用 null,从而避免空指针异常。

二、创建 Optional 对象
1. 使用 of 方法创建非空的 Optional 对象
Optional<String> optional = Optional.of("Hello, World!");
2. 使用 ofNullable 方法创建可能为空的 Optional 对象
Optional<String> optional = Optional.ofNullable(null);
3. 使用 empty 方法创建一个空的 Optional 对象
Optional<String> optional = Optional.empty();
三、检查值是否存在

我们可以使用 isPresent 方法检查 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 absent");
}
4. 使用 ifPresent 方法执行回调

ifPresent 方法接受一个 Consumer 对象作为参数,当值存在时执行回调操作:

optional.ifPresent(value -> System.out.println("Value is present: " + value));
四、获取值
1. 使用 get 方法获取值

如果 Optional 对象包含值,可以使用 get 方法获取值:

String value = optional.get();
System.out.println("Value: " + value);

需要注意的是,在调用 get 方法之前,最好先使用 isPresent 方法检查值是否存在,否则会抛出 NoSuchElementException

2. 使用 orElse 方法提供默认值

orElse 方法可以在值不存在时提供一个默认值:

Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElse("Default value");
System.out.println("Value: " + value);
3. 使用 orElseGet 方法提供默认值

orElseGet 方法接受一个 Supplier 对象作为参数,在值不存在时调用 Supplier 获取默认值:

String value = optional.orElseGet(() -> "Default value from Supplier");
System.out.println("Value: " + value);
4. 使用 orElseThrow 方法抛出异常

orElseThrow 方法在值不存在时抛出指定的异常:

String value = optional.orElseThrow(() -> new RuntimeException("Value not present"));
System.out.println("Value: " + value);
五、转换值
1. 使用 map 方法转换值

map 方法接受一个 Function 对象作为参数,将值进行转换,并返回一个新的 Optional 对象:

Optional<String> optional = Optional.of("Hello, World!");
Optional<Integer> lengthOptional = optional.map(String::length);
lengthOptional.ifPresent(length -> System.out.println("Length: " + length));
2. 使用 flatMap 方法转换值

flatMap 方法与 map 方法类似,但用于返回 Optional 类型的结果:

Optional<String> optional = Optional.of("Hello, World!");
Optional<String> upperOptional = optional.flatMap(value -> Optional.of(value.toUpperCase()));
upperOptional.ifPresent(value -> System.out.println("Uppercase Value: " + value));
六、过滤值

使用 filter 方法可以对 Optional 对象中的值进行过滤,返回一个新的 Optional 对象:

Optional<String> optional = Optional.of("Hello, World!");
Optional<String> filteredOptional = optional.filter(value -> value.contains("Hello"));
filteredOptional.ifPresent(value -> System.out.println("Filtered Value: " + value));

小结

通过本篇博客,我们详细介绍了Java 8中的Optional类,包括如何创建Optional对象、检查值是否存在、获取值、转换值和过滤值。Optional类的引入,使得我们可以更明确地处理值的存在与否,避免了空指针异常的发生。

在实际开发中,合理使用Optional类可以显著提高代码的可读性和健壮性。如果你对Optional类还有其他疑问或有更多的使用技巧,欢迎在评论区分享和讨论。Happy coding!

标签:Java,optional,System,Value,value,使用,println,Optional
From: https://blog.csdn.net/weixin_53840353/article/details/139402881

相关文章

  • Spring Boot 3.3.0 新特性| 使用 CDS 优化启动时间
    一、CDS是什么?类数据共享(CDS)是一项JVM功能,可帮助减少Java应用程序的启动时间和内存占用。从JDK12开始,默认的CDS归档文件与OracleJDK二进制文件一起预打包。笔者测试使用的 OpenJDK64-BitServerVMZulu21.34+19-CA(build21.0.3+9-LTS,mixedmode,sharin......
  • Java运算符 二进制计算 素数问题 九九乘法表 月份问题 分解质因数 完全数问题 天数计
    1.代码观察inta=6--;System.out.println(a);在Java中,后置递减运算符--只能在整型(int)和长整型(long)变量上使用,而且必须将--放在变量值的后面。因此,6--是非法的,Java编译器会报错。正确代码如下inta=6;a--;System.out.println(a);输出结果为52.代码分析Syst......
  • RabbitMQ 进阶使用之延迟队列 → 订单在30分钟之内未支付则自动取消
    开心一刻晚上,媳妇和儿子躺在沙发上儿子疑惑的问道:妈妈,你为什么不去上班媳妇:妈妈的人生目标是前20年靠父母养,后40年靠你爸爸养,再往后20年就靠你和妹妹养儿子:我可养不起媳妇:为什么儿子:因为,呃...,我和你的想法一样讲在前面如果你们对RabbitMQ感到陌生,那可以停止往下阅读了......
  • MySQL 使用方法以及教程
    一、引言MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于Web开发、数据分析等领域。它提供了高效、稳定的数据存储和查询功能。同时,Python作为一种强大的编程语言,也提供了多种与MySQL交互的库,其中pymysql就是其中之一。本文将介绍MySQL数据库的基础使用,并通过Pytho......
  • 基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法
    基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法本文介绍了基于docker的oracle12.2.0.1部署,包含了oracle基本配置、监听器和实例启动方法、PDB和CDB操作方法、表空间建立和用户数据库建立、常见启动问题解决等,并介绍了镜像制作、镜像打包、镜像迁移......
  • Java Lambda表达式
    Lambda表达式Lambda表达式,也可以称为闭包,是Java8发布的最重要新特性Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)使用Lambda表达式可以使代码变的更加简洁紧凑语法:(parameter)->expression(parameter)->{statement;}parameter:参数列表,......
  • RabbitMQ的详解和使用
    一、什么是MQ?1、MQ的概念MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器。多用于系统之间的异步通信。下面用图来理解异步通信,并阐明与同步通信的区别。同步通信:甲乙两人面对面交流,你一句我一句必须同步进行,两人除此之外不做任何事情 异步通信:异步通信......
  • Java中的依赖注入:提高代码的可维护性和可测试性
            依赖注入(DI)是一种软件设计模式,旨在实现控制反转(IoC),通过这种方式,对象的依赖项(通常是服务)不由对象本身创建,而是由外部容器动态提供。在Java中,依赖注入是实现松耦合和增强代码可维护性的有效手段。本文将探讨Java中的依赖注入概念、其优势以及如何利用现有的框架......
  • 【Python】生成html文档-使用dominate
    原文地址:https://www.cnblogs.com/kaerxifa/p/13035376.htmldominate简介dominate是一个使用优雅的DOMAPI创建和操作HTML文档的Python库。使用它能非常简洁地编写纯Python的HTML页面,这消除了学习另一种模板语言的需要,利用Python更强大的特性。 首先安装依赖:pipinstall......
  • java反射机制
    java反射机制基础内容反射调用就是指通过反射机制进行的方法调用。反射机制是Java编程语言的一个重要特性,它允许程序在运行时检查、操作和实例化类,方法,字段等,并在运行时获取类的信息以及动态调用类的方法。反射机制使得Java程序可以在运行时动态地加载、探测和使用类,而不需要在......