JAVA8新特性——Optional

Optional 是 Java 8 引入的新特性之一,它是一个容器类,代表一个可能包含或者不包含实际对象的值。其目的是为了减少代码中空指针异常(NullPointerException)的发生,并使得代码更加安全和易读。使用 Optional 可以避免直接返回 null,从而减少空值检查。

Optional对象的创建

Optional 类提供了几种创建方式:

Optional.of(T value):当值非 null 时使用此方法创建 Optional 对象,如果传入 null,将抛出 NullPointerException。
Optional.empty():创建一个没有值的 Optional 对象。
Optional.ofNullable(T value):允许传入 null 值,如果值为 null,则返回一个空的 Optional,否则返回包含该值的 Optional。
我们一般采用第三种方式创建Optional对象

demo
Author author = getAuthor();
Optional<Author> authorOptional = Optional.ofNullable(author);
Optional.ofNullable的等价写法
public static Optional<Author> getAuthorOptional(){Author author = new Author(1L, "蒙多", 33, "eee", null);//return Optional.ofNullable(author); //这种创建Optional的方法可以等价于下面这种return author == null ? Optional.empty() : Optional.of(author);}

我们一般使用Optional的静态方法ofNullable来把数据封装成一个Optional对象,无论传入的参数是否为null都不会出现问题

安全的消费值

我们获取Optional对象后肯定需要对其中的数据进行使用,这时候我们可以使用ifPresent方法来消费其中的值。该方法会判断封装的数据是否为空,不为空时才执行具体的消费代码,这样就更加安全了。

demo
import java.util.Optional;
import java.util.function.Consumer;public class OptionalDemo {public static void main(String[] args) {Author author = getAuthor();Optional<Author> authorOptional = Optional.ofNullable(author);authorOptional.ifPresent(author12 -> System.out.println(author12.getName()));}
}

获取值

我们可以通过get方法获取值。如果存在值,则返回该值,否则抛出 NoSuchElementException.很显然,因为可能抛出异常,所以我们不推荐这种方式。

import java.util.Optional;
import java.util.function.Consumer;public class OptionalDemo {public static void main(String[] args) {Optional<Author> authorOptional1 = getAuthorOptional();Author author1 = authorOptional1.get();System.out.println(author1);}public static Optional<Author> getAuthorOptional(){Author author = new Author(1L, "蒙多", 33, "eee", null);return Optional.ofNullable(author); //这种创建Optional的方法可以等价于下面这种//return author == null ? Optional.empty() : Optional.of(author);}
}

安全获取值

orElseGet(Supplier<T> supplier):如果有值则返回该值,否则返回由 Supplier 提供的值。

Optional<Author> authorOptional1 = getAuthorOptional();authorOptional1.orElseGet(new Supplier<Author>() {@Overridepublic Author get() {return new Author();}});

orElseThrow(Supplier<? extends Throwable> exceptionSupplier):如果有值则返回该值,否则抛出由 Supplier 创建的异常。

Optional<Author> authorOptional1 = getAuthorOptional();
authorOptional1.orElseThrow((Supplier<Throwable>) () -> new RuntimeException("数据为null"));

过滤

filter(Predicate<T> predicate):参考Stream

判断

isPresent():如果存在值则返回 true

数据转换

map 方法接收一个函数作为参数,并将其应用于Optional中的值,返回一个新的Optional对象,该对象包含应用函数后的结果。如果原始的Optional对象为空,则返回的Optional也是空的。参考Stream

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

规模化电动汽车接入配电网调度方法

规模日益增长的电动汽车和可再生能源带来的不确定性给配电网的安全运营带来了严峻挑战。为综合考虑多重不确定性、平衡运营成本与系统可靠性,首先,提出一种基于分布鲁棒联合机会约束的电动汽车-配电网充放电调度模型。该模型将节点电压、支路功率、备用需求等通过联合机会约束建…

常用函数式接口的使用

FunctionalInterface注解 函数式接口在java中是指:有且仅有一个抽象方法的接口。 虽然知道怎么使用&#xff0c;但是没有搞懂使用场景&#xff0c;暂且记录下使用方法吧&#xff0c;不至于看到源码的时候不知所云。 要我自己写代码&#xff0c;我是想不起来这样用的&#xff0…

轻松掌控资产:企业必备的智能管理解决方案

在信息化管理日益重要的今天&#xff0c;高效管理企业的固定资产成为亟待解决的问题。我们深知企业在资产管理方面面临的挑战&#xff0c;因此推出了一款全新的资产管理解决方案&#xff0c;旨在帮助企业轻松应对资产管理中的各种难题。 特色功能 1. 资产申购 员工可通过系统便…

计算机毕业设计之:教学平台微信小程序(

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

YOLOv5的训练技巧汇总

文章目录 前言训练技巧1.训练预热 Warmup1.1 什么是训练预热 Warmup&#xff1f;1.2 常见的训练预热类型1.3 yolov5里面的warmup 2.余弦退火调整学习率 CosineAnnealingLR2.1 解释2.2 yolov5中的余弦退火 3.自适应锚框 Autoanchor3.1 什么是anchor?3.1 yolov5中的默认锚框3.3 …

【网络编程】socket套接字|sockaddr|sockaddr_in|通信过程

目录 ​编辑 源IP地址和目的IP地址 Socket 网络字节序 socket编程接口 sockaddr结构 sockaddr sockaddr_in(IPv4) sockaddr_in(IPv6) 完整的套接字&#xff08;socket&#xff09;通信过程 创建socket套接字 bind绑定套接字 listen建立监听 accept接受连接 connect…

OpenCV系列教程二:基本图像增强(数值运算)、滤波器(去噪、边缘检测)

文章目录 一、基本图像增强&#xff08;数值运算&#xff09;1.1 加法 &#xff08;cv2.add&#xff09;1.1.1 图像与标量相加&#xff08;调节亮度&#xff09;1.1.2 图像与图像相加&#xff08;两个图像shape要相同&#xff09;1.1.3 图像的加权加法&#xff08;渐变切换&…

身份证识别接口的应用场景和作用

引言 在信息化与数字化高速发展的今天&#xff0c;身份证作为个人身份的重要证明文件&#xff0c;在各行各业的应用越来越广泛。传统的身份证信息录入和审核过程通常需要人工操作&#xff0c;不仅效率低下&#xff0c;而且容易出现错误。为了解决这些问题&#xff0c;身份证识别…

C++入门基础知识八

1.介绍new与delete 1.malloc和free是函数&#xff0c;new和delete是操作符 2.malloc申请的空间不会初始化&#xff0c;new可以初始化 3.malloc申请空间失败时&#xff0c;返回的是NULL&#xff0c;因此必须判空&#xff0c;new不需要&#xff0c;但是new需要捕获异常 4.申请…

Kyutai 开源对话模型 Moshi;李飞飞空间智能公司已筹集超过 2.3 亿美元丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、…

OpenAI GPT o1技术报告阅读(3)-英文阅读及理解

✨继续阅读报告&#xff1a;使用大模型来学习推理(Reason) 原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 这次我们继续看一个英文阅读理解的案例。 原问题&#xff1a; The following passage is the draft of an excerpt from a contempora…

Web开发:ABP框架3——入门级别的接口增删改查实现原理

一、上节回顾 运用了ABP框架&#xff0c;使用了EFcore进行增删改查 二、程序的入口 代码解说&#xff1a; public class Program // 定义程序主类 {public async static Task<int> Main(string[] args) // 主方法&#xff0c;返回状态码{// 配置Serilog日志Log.Logger…

手机换新,怎么把旧iPhone手机数据传输至新iPhone16手机

随着苹果公司推出了备受期待的iPhone 16。这款最新型号的iPhone不仅在设计上进行了革新&#xff0c;更在性能和功能上带来了前所未有的突破。对于那些准备从旧iPhone升级到iPhone 16的用户来说&#xff0c;最关心的问题之一就是如何把旧手机的资料转移到新手机中了。如果你不知…

Java从入门到精通学习框架(二)

在这个阶段&#xff0c;重点是掌握 Java 的高级特性&#xff0c;理解和应用常见的数据结构、Java 的并发编程模型&#xff0c;以及深入理解 Java 的内存管理机制等。通过这一阶段的学习&#xff0c;你将能够编写更加复杂和高效的程序&#xff0c;并为后续的框架学习打下坚实基础…

深度学习-图像处理篇1.1-1.2神经网络

1.1卷积神经网络基础 卷积层 对彩色RGB图像进行卷积 1.卷积核的通道数与输入特征层的通道数相同 2.卷积输出的特征矩阵通道数与卷积核个数相同 池化层 池化中一般池化核大小和步长大小一样 思考 加上偏移量bias该如何计算? 卷积计算时加上偏移量即可 加上激活函数该如何计…

Python画笔案例-055 绘制七彩浪花

1、绘制七彩浪花 通过 python 的turtle 库绘制 七彩浪花&#xff0c;如下图&#xff1a; 2、实现代码 绘制七彩浪花&#xff0c;以下为实现代码&#xff1a; """七彩浪花.py """ import turtlecs [red,orange,yellow,green,cyan,blue,magenta]…

E2VPT: An Effective and Efficient Approach for Visual Prompt Tuning

论文汇总 存在的问题 1.以前的提示微调方法那样只关注修改输入&#xff0c;而应该明确地研究在微调过程中改进自注意机制的潜力&#xff0c;并探索参数效率的极限。 2.探索参数效率的极值来减少可调参数的数量? 解决办法 提示嵌入进行transformer中 提示剪枝 Token-wise …

OpenCV_距离变换的图像分割和Watershed算法详解

在学习watershed算法的时候&#xff0c;书写代码总会出现一些错误&#xff1a; 上述代码运行报错&#xff0c;显示OpenCV(4.10.0) Error: Assertion failed (src.type() CV_8UC3 && dst.type() CV_32SC1) in cv::watershed 查找资料&#xff1a;目前已解决 这个错…

CentOS7搭建Hadoop3集群教程

一、集群环境说明 1、用VMware安装3台Centos7虚拟机 2、虚拟机配置&#xff1a;2C&#xff0c;2G内存&#xff0c;50G存储 3、集群架构设计 从表格中&#xff0c;可以看出&#xff0c;Hadoop集群&#xff0c;主要有2个模块服务&#xff0c;一个是HDFS服务&#xff0c;一个是YAR…

wordpress更换域名后用户图片头像不显示

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…