首页 > 其他分享 >Optional类的使用

Optional类的使用

时间:2024-08-14 16:08:58浏览次数:8  
标签:返回 Optional 该值 使用 null optional

Optional类的使用

目录

基本使用

Optional 类提供了几种静态方法来创建 Optional 实例:

  • Optional.empty():创建一个空的 Optional 实例。
  • Optional.of(T value):创建一个包含非空值的 Optional 实例。
  • Optional.ofNullable(T value):如果传入的值不为 null,则创建一个包含该值的 Optional 实例;如果为 null,则创建一个空的 Optional 实例。

常用方法

  • isPresent():如果 Optional 包含非空值,则返回 true
  • ifPresent(Consumer<? super T> consumer):如果 Optional 包含非空值,则对该值执行给定的操作。
  • get():如果 Optional 包含值,则返回该值;否则抛出 NoSuchElementException
  • orElse(T other):如果 Optional 包含值,则返回该值;否则返回提供的其他值。
  • orElseGet(Supplier<? extends T> other):如果 Optional 包含值,则返回该值;否则返回由 Supplier 回调函数提供的值。
  • orElseThrow():如果 Optional 包含值,则返回该值;否则抛出 NullPointerException 或由 Supplier 回调函数提供的异常。
  • map(Function<? super T,? extends U> mapper):如果 Optional 包含值,则将值应用到提供的函数上,并返回一个新的 Optional 实例;如果为空,则返回空的 Optional
  • flatMap(Function<? super T, Optional<U>> mapper):与 map 类似,但是 mapper 返回的是一个 Optional,这允许链式调用。

示例代码

// 创建一个包含值的 Optional
Optional<String> optional = Optional.of("Hello, World!");

// 创建一个空的 Optional
Optional<String> empty = Optional.empty();

// 使用 isPresent 检查值是否存在
if (optional.isPresent()) {
    System.out.println("Value is present: " + optional.get());
}

// 使用 ifPresent 执行操作
optional.ifPresent(System.out::println);

// 使用 orElse 提供默认值
String value = optional.orElse("Default Value");

// 使用 orElseGet 获取由 Supplier 提供的值
value = optional.orElseGet(() -> "Value from Supplier");

// 使用 map 转换值
Optional<Integer> length = optional.map(String::length);

// 使用 flatMap 链式转换
Optional<Integer> maybeLength = Optional.ofNullable(null)
    .flatMap(s -> Optional.of(s.length()));

使用场景

Optional 类非常适合用于方法返回类型,这些方法可能返回 null。通过返回 Optional,可以避免调用者直接处理 null 值,而是通过 Optional 提供的方法来安全地访问值。

注意事项

  • 不要使用 Optional 作为字段类型或参数类型,因为这会隐藏 null 值的存在。
  • 避免在 Optional 中包装基本类型,因为 Optional 只能包装对象类型。
  • 使用 Optional 时,应避免调用 get(),因为它可能会抛出异常。使用 orElseorElseGet 可以更安全地处理空值。

Optional 类是一个强大的工具,可以帮助开发者以更安全的方式处理可能为空的值,减少 NullPointerException 的风险。

标签:返回,Optional,该值,使用,null,optional
From: https://www.cnblogs.com/luoyiwen123/p/18359171

相关文章

  • 阿里云矢量图标库的使用
    关于图标,前端工程师接触的不算少的了。虽然不少公司都会有自己的前端ui工程师设计图标,各类ui库也会有自己的图标库,但如果你是个人开发或者是学校的同学,再或者你们没有ui设计图标,那么你就能运用到我的方案。官网地址:iconfont-阿里巴巴矢量图标库这个不用担心,注册就能免费使用,......
  • 如何使用Zabbix API批量修正主机名称
    先说为什么要修正?这其实源自于Ansible安装zabbixagent的一个小Bug。有小伙伴发现,利用ansible批量安装zabbixagent后,zabbix系统上显示的主机名出错了,主机显示的名称都变成了操作系统的IP(如下图),这在一定程度增加了维护难度。如果一台一台去修改和校正主机名将会非常耗费时间,这......
  • windeployqt.exe的使用与避坑(windows平台)
    1.介绍windeployqt.exe是Qt自带的工具,用于创建应用程序发布包。简单来说,这个工具可以自动地将某程序依赖的库、资源拷贝到其所在目录,防止程序在其他电脑上运行报找不到库的错误。这里贴上官方文档:https://doc.qt.io/qt-5/windows-deployment.html本文适用于Windows+Visual......
  • Python轻量级 NoSQL 数据库之tinydb使用详解
    概要在现代应用开发中,使用数据库来存储和管理数据是非常常见的需求。对于简单的数据存储需求,关系型数据库可能显得过于复杂。TinyDB是一个纯Python实现的轻量级NoSQL数据库,专为嵌入式场景设计,适用于小型项目、原型开发和教学等场景。本文将详细介绍TinyDB库,包括其安......
  • Python之sys.argv功能使用详解
    概要在Python编程中,命令行参数是与程序交互的重要方式之一。通过命令行参数,用户可以在运行脚本时传递输入值,从而影响程序的行为。Python提供了一个非常方便的模块——sys,其中的sys.argv列表可以轻松地获取命令行参数。在本文中,将深入探讨sys.argv的使用方法,结合实际示例展示......
  • Python编程中不可忽视的docstring使用详解
    概要在Python编程中,代码的可读性和可维护性至关重要。除了清晰的命名和结构良好的代码外,良好的文档字符串(docstring)也是确保代码易于理解和使用的关键工具。docstring是Python中用于记录模块、类、方法和函数行为的字符串,帮助开发者和用户快速了解代码的功能和用法。本文将......
  • Java开发中使用腾讯云OCR进行身份证识别与COS云存储实践
    文章目录完整代码代码讲解总结在Java开发中,处理身份证识别和云存储是一项常见的需求,尤其是在需要用户身份验证的应用场景中。今天,我想和大家分享一个实际的案例,展示如何利用腾讯云的OCR服务进行身份证识别,并将识别到的身份证信息上传到云存储中。完整代码以下......
  • 不用再找了,吐血整理ChatGPT 新手使用手册~
    现在人工智能很强大,聊聊天、写论文、搞翻译、写代码、写文案、审合同、情感陪伴等,真是无所不能~本来以为ChatGPT早已普及了,没想到仍然有很多小伙伴还没用上。。。其实使用很简单,可以选通义、智谱、Deepseek等“83分”的国产大模型~国产大模型,平均80分左右~也可选国内的......
  • Git使用
    1.初始化工作1.设置用户名称和email地址git命令行执行以下信息#设置用户信息gitconfig--globaluser.name"sss"gitconfig--globaluser.email"[email protected]"#查看配置信息gitconfig--list2.获取git仓库(两种方式)1.在本地初始化一个git仓库(不常用)2......
  • lsof 使用
     lsof-i lsof-a-ppidlsof是一个非常强大的工具,用于列出系统上打开的文件,包括网络套接字、管道、设备等。以下是一些lsof的常用用法和参数说明:1.列出所有打开的文件bash复制代码lsof显示系统上所有打开的文件。2.显示某个用户打开的文件bash复制代码lsof......