java基础之Java8新特性-Optional

目录

1.简介

2.Optional类常用方法

3.示例代码

4.示例代码仓库地址


1.简介

Java 8引入了一个重要的新特性,即Optional类。Optional类是为了解决空指针异常而设计的。

在Java中,当我们尝试访问一个空对象的属性或调用其方法时,很容易抛出NullPointerException。这种异常可能会导致程序崩溃或产生意外结果。

Optional类的目的是提供一种更好的处理空值的方式。它可以包含一个非空的对象,也可以表示一个空值。使用Optional类,我们可以避免直接操作空对象,从而减少NullPointerException的发生。

2.Optional类常用方法

后面的示例代码主要用到map、orElse、ifPresent方法

1.map(Function<? super T,? extends U> mapper):如果Optional对象包含一个非空的值,则将该值应用给定的函数进行转换,并返回一个新的Optional对象,用于存储转换后的结果;否则返回一个空的Optional对象。

2.ofNullable(T value):如果value不为null,则返回一个包含该value的Optional对象;否则返回一个空的Optional对象。

3.isPresent():如果Optional对象包含一个非空的值,则返回true;否则返回false。

4.get():如果Optional对象包含一个非空的值,则返回该值;否则抛出NoSuchElementException异常。

5.orElse(T other):如果Optional对象包含一个非空的值,则返回该值;否则返回other。

6.ifPresent(Consumer<? super T> consumer):如果Optional对象包含一个非空的值,则对该值执行给定的操作;否则不做任何操作。

3.示例代码

我们来看一段代码

public static void main(String[] args) {User user=null;//模拟不确定的空对象Random random = new Random();if(random.nextInt(11)>5){user= new User("Bob");}//把名字转成小写user.setName(user.getName().toLowerCase());System.out.println(user.getName());}

在这段代码中存在潜在的空指针异常风险。如果随机数小于等于5,则 user 对象为 null,调用 user.getName() 方法会导致空指针异常。

应该在调用 getName() 方法前先进行非空判断。

我们先看传统的手动判空处理

 public static void main(String[] args) {User user = null;// 模拟不确定的空对象Random random = new Random();if (random.nextInt(11) > 5) {user = new User("Bob");}// 把名字转成小写if (user != null && user.getName() != null) {user.setName(user.getName().toLowerCase());System.out.println(user.getName());} else {System.out.println("用户对象为空或用户名为空");}}

相较于这种传统的手动判空方法我们可以使用更优雅的方法Optional

  public static void main(String[] args) {User user = null;// 模拟不确定的空对象Random random = new Random();if (random.nextInt(11) > 5) {user = new User("Bob");}// 使用Optional类来包装空对象//Lambda表达式链式处理写法Optional<String> optionalS1 = Optional.ofNullable(user).map(u->u.getName()).map(name->name.toLowerCase());// 输出结果,若空则设置默认值为MiJiuSystem.out.println(optionalS1.orElse("MiJiu"));//非空则输出结果optionalS1.ifPresent(s->System.out.println(s));System.out.println("--------------------------------");//用方法引用简化Optional<String> optionalS2 = Optional.ofNullable(user).map(User::getName).map(String::toLowerCase);System.out.println(optionalS2.orElse("MiJiu"));optionalS1.ifPresent(System.out::println);}

有关什么是Lambda表达式可以看这篇

java基础之Java8新特性-Lambda-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_62262918/article/details/135395534?spm=1001.2014.3001.5502

有关什么是方法引用可以看这篇

java基础之Java8新特性-方法引入-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_62262918/article/details/135469298?spm=1001.2014.3001.5502

4.示例代码仓库地址

j8-new-feature: java8新特性示例Demo (gitee.com)​编辑https://gitee.com/mi9688-wine/j8-new-featureicon-default.png?t=N7T8https://gitee.com/mi9688-wine/j8-new-feature

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/612168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【服务器数据恢复】Hyper-V虚拟化数据恢复案例

服务器数据恢复环境&#xff1a; Windows Server操作系统服务器&#xff0c;部署Hyper-V虚拟化环境&#xff0c;虚拟机的硬盘文件和配置文件存放在某品牌MD3200存储中&#xff0c;MD3200存储中有一组由4块硬盘组成的raid5阵列&#xff0c;存放虚拟机的数据文件&#xff1b;另外…

国内首款支持苹果Find My芯片-伦茨科技ST17H6x

深圳市伦茨科技有限公司&#xff08;以下简称“伦茨科技”&#xff09;发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家&#xff0c;该平台提供可通过Apple Find My认证的Apple查找&#xff08;Find My&#xff09;功能集成解决方案。…

建立四叉树[中等]

一、题目 给你一个n * n矩阵grid&#xff0c;矩阵由若干0和1组成。请你用四叉树表示该矩阵grid。你需要返回能表示矩阵grid的四叉树的根结点。四叉树数据结构中&#xff0c;每个内部节点只有四个子节点。此外&#xff0c;每个节点都有两个属性&#xff1a; 【1】val&#xff1…

GLSL着色器入门(持续更新中...)

目录 第一章&#xff1a;OpenGL works with triangles 第二章&#xff1a; Parallel Processing 第章 推荐来自b站的课程004 GLSL is not Javascript_哔哩哔哩_bilibili 第一章&#xff1a;OpenGL works with triangles 当我们谈论GLSL着色器时&#xff0c;其实就是在说怎么…

C语言奇偶数交换排序问题

目录 问题描述如下&#xff1a; move函数的具体实现&#xff1a; main函数 运行效果 代码&#xff08;注意看注释&#xff09;&#xff1a; 问题描述如下&#xff1a; 给定一个整数数组&#xff0c;要求将其中的奇数元素全部移动到前面&#xff0c;偶数元素全…

【深度学习:Foundation Models】基础模型完整指南

【深度学习&#xff1a;Foundation Models】基础模型完整指南 什么是基础模型&#xff1f;基础模型背后的 5 项人工智能原理根据大量数据进行预训练自我监督学习过度拟合微调和快速工程&#xff08;适应性强&#xff09;广义的 基础模型的用例基础模型的类型计算机视觉基础模型…

最新版CleanMyMac X4.14.7智能清理mac磁盘垃圾工具

CleanMyMac X是一款专业的Mac清理软件&#xff0c;可智能清理mac磁盘垃圾和多余语言安装包&#xff0c;快速释放电脑内存&#xff0c;轻松管理和升级Mac上的应用。同时CleanMyMac X可以强力卸载恶意软件&#xff0c;修复系统漏洞&#xff0c;一键扫描和优化Mac系统&#xff0c;…

借助GPT理解 “ Android中 点击弹框外部 取消弹框”

在平常的开发工作中 或 阅读技术博客/书籍 时&#xff0c;难免会遇到我们不懂的知识点&#xff0c;网络上搜索的资料 需要有准确性&#xff0c;系统性&#xff0c;可实操性。 这样的资料查询很费时间且还不一定能找到&#xff0c;但是如果借助训练过的的gpt&#xff0c;就会省下…

[Kubernetes]7. K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群)

上一节讲解了[Kubernetes]6. k8s Pod配置管理ConfigMap & Secret以及传递环境变量的使用,k8s的命名空间以及使用kubens管理命名空间的使用,这里来介绍一下Helm的使用 一.Helm相关介绍 1.介绍 在 kubernetes 系统上部署容器化应用时需要事 先手动编写资源配置清单文件 以…

Prometheus实战篇:Prometheus监控docker

Prometheus实战篇:Prometheus监控docker 准备环境 监控docker 为了能够获取到Docker容器的运行状态,用户可以通过Docker的stats命令获取当前主机上运行容器的统计信息,可以查看容器的CPU利用率,内存使用量,网络IO总量以及磁盘IO总量等信息. docker stats除了使用命令以外,用户…

【占用网络】SurroundOcc:基于环视相机实现3D语义占用预测 ICCV 2023

前言 本文分享“占用网络”方案中&#xff0c;来自ICCV 2023的SurroundOcc&#xff0c;它基于环视相机实现3D语义占用预测。 使用空间交叉注意力将多相机图像信息提升到3D体素特征&#xff0c;即3D体素Query到2D图像中查询融合特征的思想。 然后使用3D卷积逐步对体素特征进行…

如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理

首先&#xff0c;需要用到的这个工具&#xff1a; 百度 密码&#xff1a;qwu2蓝奏云 密码&#xff1a;2r1z 打开工具&#xff0c;切换到“文章工作域”&#xff08;嗯...默认就是&#xff09; 找到这个&#xff0c;多内容断行分割 点击打开&#xff0c;出现如下窗口设置 相关的…

Netty-Netty基础应用与了解

前言 Netty 的优势 1、 API 使用简单&#xff0c;开发门槛低&#xff1b; 2、功能强大&#xff0c;预置了多种编解码功能&#xff0c;支持多种主流协议&#xff1b; 3、定制能力强&#xff0c;可以通过 ChannelHandler 对通信框架进行灵活地扩展&#xff1b; 4、性能高…

【教程】通过Excel宏/Pandas两种方法来自动添加渐变数据条

这种数据真的很难看懂&#xff1a; 一般会对其画折线图或者数据条&#xff0c;相比起来就非常直观&#xff1a; 但是每一列都要手动这样设置就非常累了&#xff0c;所以这里就用到了VBA宏(或者Pandas)。 VBA宏方法 从这里进入宏&#xff1a; 随便写一个宏名后点创建&#xff1…

LangChain 69 向量数据库Pinecone入门

LangChain系列文章 LangChain 50 深入理解LangChain 表达式语言十三 自定义pipeline函数 LangChain Expression Language (LCEL)LangChain 51 深入理解LangChain 表达式语言十四 自动修复配置RunnableConfig LangChain Expression Language (LCEL)LangChain 52 深入理解LangCh…

机器视觉在OCR字符检测的应用

在产品质量 检测过程中&#xff0c;对于字符、条码等标识信息的识别、读取、检测是非常重要的一部分&#xff0c;比如在食品饮料包装检测中&#xff0c;生产日期 、保质期 、生产批号 、条码等字符信息是产品管理和追溯必不可缺的&#xff0c;因此利用机器视觉技术进行OCR字符采…

【实用技巧】Windows电脑向iPhone或iPad传输视频方法2:有线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频&#xff0c;以 iPhone 为例&#xff0c;iPad的操作方法类似&#xff0c;本文不作赘述。 二、所需原材料 Windows 电脑&#xff08;有 USB-A 或 USB-C 接口&#xff09;&#xff08;桌面或其它文件夹中…

Web组件的使用

文章目录 1 概述2 加载网页加载在线网页加载本地网页 3 网页缩放文本缩放 4 Web组件事件Web组件处理JS confirm事件 5 Web和JavaScript交互启用JavaScriptWeb组件调用JS方法JS调用Web组件方法 6 处理页面导航7 调试网络应用8 参考链接 1 概述 相信大家都遇到过这样的场景&…

依赖Kafka的Go单元测试例解

Kafka[1]是Apache基金会开源的一个分布式事件流处理平台&#xff0c;是Java阵营(最初为Scala)中的一款杀手级应用&#xff0c;其提供的高可靠性、高吞吐量和低延迟的数据传输能力&#xff0c;让其到目前为止依旧是现代企业级应用系统以及云原生应用系统中使用的重要中间件。 在…

SpringCloud微服务 【实用篇】| RabbitMQ快速入门、SpringAMQP

目录 一&#xff1a;初始RabbitMQ 1. 同步和异步通讯 1.1 同步调用 1.2 异步调用 2. MQ常见框架 二&#xff1a;RabbitMQ快速入门 1. RabbitMQ概述和安装 2. 常见消息队列模型 3. 快速入门案例 三&#xff1a;SpringAMQP 1. Basic Queue 简单队列模型 2. Work Queu…