Java8的Options介绍
Java8引入了一个名为 Options 的新类,它是一个容器,可以保存单个值或根本不保存任何值。Optional目的是提供一种更优雅的方式来处理 null 值,这通常会导致NullPointerException。在这篇博客文章中,我们将探索如何在 Java8中使用 Options,并提供一个演示来演示它的用法。
Optional是什么?
Optional项是一个容器对象,它可以包含非空值,也可以不包含非空值。它用于表示没有值,而不是使用 null。引入Optional项是为了帮助开发人员编写更简洁、更具表现力的代码,并避免 NullPointerException。
使用Optional
1.要创建Optional对象,可以调用它的静态方法() ,该方法接受一个对象作为参数。如果该对象为空,则将创建一个空的“Optional”对象。举个栗子:
Optional<String> optional = Optional.of("hello");
Optional<String> emptyOptional = Optional.ofNullable(null);
在第一行中,我们创建了一个Optional对象,其中包含字符串“ hello”。
在第二行中,我们创建了一个空的 Options 对象,因为传递给 ofNullable ()的参数是 null。
2.要访问Optional对象内部的值,可以调用它的 get ()方法。但是,如果Optional项为空,则会引发 NoSuchElementException。举个栗子:
Optional<String> optional = Optional.of("hello");
String value = optional.get(); // value will be "hello"
Optional<String> emptyOptional = Optional.ofNullable(null);
String nullValue = emptyOptional.get(); // throws NoSuchElementException
为了避免引发异常,可以使用 isCurrent ()方法检查 Options 对象是否包含值:
Optional<String> optional = Optional.of("hello");
if (optional.isPresent()) {String value = optional.get();System.out.println(value); // prints "hello"
}
你还可以使用 orElse ()方法来提供一个默认值,如果Optional项为空:
Optional<String> optional = Optional.ofNullable(null);
String value = optional.orElse("default value");
System.out.println(value); // prints "default value"
3.最后,可以使用 map ()方法转换 Options 对象内部的值。这个方法接受一个函数对象作为参数,并返回一个新的Optional对象,其中包含将函数应用到该值的结果:
Optional<String> optional = Optional.of("hello");
Optional<Integer> length = optional.map(String::length);
length.ifPresent(System.out::println); // prints "5"
Demo栗子-Optional的用法
import java.util.Optional;public class OptionalDemo {public static void main(String[] args) {String value = null;Optional<String> optional = Optional.ofNullable(value);String result = optional.orElse("default value");System.out.println(result); // prints "default value"}
}
在这个演示中,我们从一个 null 值创建一个 Options 对象,并使用 orElse ()方法提供一个默认值(如果 Options 为空)。然后程序输出结果,即“默认值。
综上所述
Optional特性是 Java8中引入的一个强大特性,它提供了一种更优雅的处理空值的方法。它可以帮助您避免 NullPointerException,并编写更简洁和更具表现力的代码。请记住始终明智地使用Optional项,并在代码中使用它时考虑清晰度和性能之间的权衡。
相关文章:
Java8的Options介绍
Java8引入了一个名为 Options 的新类,它是一个容器,可以保存单个值或根本不保存任何值。Optional目的是提供一种更优雅的方式来处理 null 值,这通常会导致NullPointerException。在这篇博客文章中,我们将探索如何在 Java8中使用 O…...
SpringBoot 多数据源及事务解决方案
1. 背景 一个主库和N个应用库的数据源,并且会同时操作主库和应用库的数据,需要解决以下两个问题: 如何动态管理多个数据源以及切换? 如何保证多数据源场景下的数据一致性(事务)? 本文主要探讨这两个问题的解决方案…...
tcpdump使用教程
一、概述 tcpdump是一个功能强大的,用于抓取网络数据包的命令行工具,与带界面的Wireshark一样,基于libpcap库构建。这篇文章主要介绍tcpdump的使用。关于如何使用tcpdump的资料中,最有用的就是tcpdump的两个手册。 tcpdump使用手…...
Zynq-7000、FMQL45T900的GPIO控制(五)---linux应用层配置GPIO输出控制
上文中详细阐述了对应原理图MIO/EMIO的编号,怎么计算获取linux下gpio的编号 本文涉及C代码上传,下载地址 Zynq-7000、FMQL45T900的GPIO控制c语言代码资源-CSDN文库 本文详细记录一下针对获取到gpio的编号,进行配置输出模式,并进…...
带你搞懂人工智能、机器学习和深度学习!
不少高校的小伙伴找我聊入门人工智能该怎么起步,如何快速入门,多长时间能成长为中高级工程师(聊下来感觉大多数学生党就是焦虑,毕业即失业,尤其现在就业环境这么差),但聊到最后,很多…...
Android 11.0 framework中Launcher的启动流程分析
1.前言 在11.0的系统rom定制化开发中,在rom定制过程中,在对于开发默认Launcher功能,解决开机动画后黑屏,了解fallbackhome机制等等 对于launcher的启动流程来说很重要,接下来就来分析下launcher的启动流程 2.framework中Launcher的启动流程分析的核心类 frameworks/ba…...
2023年第十五届华中杯赛题C 题 空气质量预测与预警
2023年五一假期期间,数学建模竞赛就有四场,各种比赛各种需求应接不暇。因此,对于本次浅析有不足的地方欢迎大家指出。为了更好的帮助大家华中杯参赛,下面带来,C题详细版思路。由于C题的难度,注定选题人数将…...
Go官方指南(一)包、变量、函数
import "time" 获取当前系统时间:time.Now() 每个 Go 程序都是由包构成的 按照约定 ,包名与导入路径的最后一个元素一致。例如,"math/rand"包中的源码均以 package rand 语句开始 在 Go 中,如果一个名字以…...
liunx笔记
快捷键 #移动到行首 ctrla #移动到行尾 ctrle #删除光标之前的字符 ctrlu #删除光标之后的字符 ctrlk #清屏 ctrll正则表达式 正则中普通常用的元字符 元字符功能.匹配除了换行符以外的任意单个字符*前导字符出现0次或连续多次.*任意长度字符^行首(以…开头),如…...
vue3 封装ECharts组件
一、前言 前端开发需要经常使用ECharts图表渲染数据信息,在一个项目中我们经常需要使用多个图表,选择封装ECharts组件复用的方式可以减少代码量,增加开发效率。 ECharts图表大家应该用的都比较多,基础的用法就不细说了ÿ…...
Spring Security 6.0系列【30】授权服务器篇之JOSE规范
有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 本系列Spring Authorization Server 版本 1.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 前言2. JOSE 规范3. JW…...
维度表设计原则
维度的作用一般是查询约束、分类汇总以及排序等,我们在进行维度表设计时,应当提前考虑: (1)维度属性尽量丰富,为数据使用打下基础 比如淘宝商品维度有近百个维度属性,为下游的数据统计、分析、…...
【requests模块上】——02爬虫基础——如桃花来
目录索引 requests请求:1. 基于get请求:*基础写法:**带参数的get请求:* 2. 基于post请求: 获取数据:1. 获取json数据:2. 获取二进制数据: 初步伪装小爬虫——添加headers: 引入&…...
Springboot +Flowable,详细解释啥叫流程实例(一)
一.简介 上一篇中学习了Flowable 中的流程模板(流程定义)的部署问题,这一篇来学习什么叫流程实例。 部署之后的流程模板,还不能直接运行,例如我们部署了一个请假流程,现在 张三想要请假,他就需…...
信息安全复习十:Web与电子商务安全
一、章节梗概 1.信息安全的学科内容 2.Web和电子商务安全问题提出 3.安全套接字协议SSL与传输层安全协议TLS 4.安全电子交易(SET)简要介绍 复习: 密码学内容:对称密钥密码、公开密钥密码、报文鉴别 PKI:数字签名、数字证书、信任关系 身份认…...
flutter 启动其他app server或者页面失败
1.目标Service 设置 android:exported"true" 2.目标Service需要声明自定义权限。客户端需要声明权限。 3.目标Service需要添加<intent-filter></intent-filter> 检查以上的声明和权限, 如果还是不行 说明是 Android 11引入了*包可见性*’ …...
【linux-进程2】进程控制
🌈环境变量 🍄初识 系统带的命令可以直接运行(ls ll命令等),但是我们自己写的命令必须要带上路径才能运行(./myproc),这是什么原因导致的?如果我们也想自己写的命令直接…...
【五一创作】多域名环境和Office 365混合部署方案
目录 一、多域名环境是什么? 二、Office 365是什么? 三、多域名环境与Office 365的结合 总结 一、多域名环境是什么? 多域名环境指的是一个企业拥有多个域名,这些域名可能隶属于不同的子公司、部门或者品牌,但是都归属于同一个母公司。例如,一个中国电信集团旗下有…...
Vue:路由route
一、概念 1、组成 每一个路由都由 key 和 value 组成。 keyvalue路由 route。 2、本质 路由的本质:一个路由表达了一组对应关系。路由器的本质:管理多组对应关系。 3、路由的工作原理 点击之后路径变化——>路由器监视到变化——>根据路径…...
Windows系统被faust勒索病毒攻击勒索病毒解密服务器与数据库解密恢复
在近期,一种名为faust后缀的勒索病毒威胁已经引起了全球计算机系统安全领域的关注。faust勒索病毒是一种基于RSA加密算法的恶意软件,能够加密目标计算机系统上的所有文件,并向用户勒索赎金来承诺解密恢复操作。下面为大家介绍一下Windows系统…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
