Optional对空值的处理

文章目录

  • 前言
  • 一、上代码
    • 1. isPresent
    • 2. ifPresent
    • 3. map
    • 4. orElse
    • 5. orElseGet
    • 6. orElseThrow
    • 7. optional
  • 总结


前言

Java中最常见的异常就是NullPointerException,空指针的出现不应该影响业务的正常执行,我们应该尽量避免,把异常控制在编码阶段,jdk8为我们提供了Optional,可以让我们更加灵活地处理空指针异常。


一、上代码

1. isPresent

isPresent判断值是否为空,返回布尔值,get方法获取值

public static void isPresent(Optional optional){if(optional.isPresent()){System.out.println(optional.get());}}

2. ifPresent

ifPresent和isPresent类似,它需要一个lamda表达式的参数,参数value就是get方法获取到的值

public static void ifPresent(Optional<String> optional){optional.ifPresent(value -> {System.out.println(value);});}

3. map

map处理完成后,返回Optional对象

public static void map(Optional<String> optional){Optional<String> ret = optional.map(String::toUpperCase);isPresent(ret);}

4. orElse

orElse如果值存在则返回当前值,不存在则返回orElse方法接收到的参数,作用类似于三目表达式

public static void orElse(Optional<String> optional){String value = optional.orElse("Default");System.out.println(value);}

5. orElseGet

orElseGet和orElse差不多,如果值存在则返回当前值,不存在则返回lamda表达式的返回值

public static void orElseGet(Optional<String> optional) {String value = optional.orElseGet(() -> {return "Default";});System.out.println(value);}

6. orElseThrow

orElseThrow值存在则继续执行,值为空的时候则抛出异常

public static void orElseThrow(Optional<String> optional) {optional.orElseThrow(NullPointerException::new);ifPresent(optional);}

7. optional

Optional构造方法是私有的,内部提供了三个方法返回Optional对象

public static void optional() {// 返回一个空的Optional类型;Optional.empty();// 使用这个方法,值不可以为空,否则抛NullPointerExceptionOptional.of("value");// 使用这个方法,值可以为空,如果为空返回Optional.emptyOptional.ofNullable(null);}

总结

回到顶部

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

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

相关文章

AI算法参数个数本身优化空间

一、背景 AI算法的参数数量并非越多越好&#xff0c;也不是越少越好。参数的数量与模型的复杂度密切相关&#xff1a; 1. 参数多&#xff08;高复杂度模型&#xff09;&#xff1a; - 优点&#xff1a;模型具有更强的表达能力和拟合能力&#xff0c;对于复杂的、非线性的数据分…

C 语言 devc++ 使用 winsock 实现 windows UDP 局域网发送消息

U参考来源 U 这里移植到windows 上 &#xff0c;使用 devc 开发。 服务端代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <winsock2.h>int main() {WORD sockVersion MAKEWORD(2, 2);WSAD…

15.2 OpenGL可编程片段处理:着色器执行

着色器执行 Shader Execution 在片段阶段存在活动的程序对象时&#xff0c;该程序对象的可执行代码用于处理由光栅化产生的传入片段。 实现允许跳过对某些片段着色器调用的执行&#xff0c;并且由于实现相关原因&#xff08;包括在片段着色器阶段不存在活动的程序对象时&…

微服务多级缓存

多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; •请求要经过Tomcat处理&#xff0c;Tomcat的性能成为整个系统的瓶颈 •Redis缓存…

python-自动化篇-办公-Excel-Openpyxl库

文章目录 1.1 Openpyxl库的安装使用1.2 Excel的新建、读取、保存1.2.1新建保存工作簿1.2.2读取保存工作簿1.2.3实例(批量建新工作表) 1.3工作表对象的获取方法1.3.1工作表获取方式1.3.2实例(批量修改工作表名) 1.4工作表的新建、复制、删除1.4.1新建工作表1.4.2复制工作表1.4.3…

MATLAB实现朴素贝叶斯分类

朴素贝叶斯&#xff08;Naive Bayes&#xff09;是一种基于贝叶斯定理的分类算法&#xff0c;它假设特征之间相互独立&#xff0c;从而简化了计算复杂性。该算法常用于文本分类、垃圾邮件过滤、情感分析等应用场景。 MATLAB实现鸢尾花数据集分类代码如下&#xff1a; clear lo…

2024 前端面试题 附录2

这里记录的是今天原篇的知识点补充 原篇地址&#xff1a;2024 前端面试题&#xff08;GPT回答 示例代码 解释&#xff09;No.21 - No.40 目录 这里记录的是今天原篇的知识点补充原篇地址&#xff1a;[2024 前端面试题&#xff08;GPT回答 示例代码 解释&#xff09;No.21 …

2024 CKS 题库 | 7、Dockerfile检测

不等更新题库 CKS 题库 7、Dockerfile检测 Task 分析和编辑给定的Dockerfile /cks/docker/Dockerfile&#xff08;基于ubuntu:16.04 镜像&#xff09;&#xff0c; 并修复在文件中拥有的突出的安全/最佳实践问题的两个指令。 分析和编辑给定的清单文件 /cks/docker/deployme…

Python·turtle库编程之:怎么画一个五角星?

文章目录 前言源码附&#xff1a; 前言 大家好&#xff0c;我是BoBo仔&#xff0c;这节课我要带来一期turtle库的使用教程——画五角星。话不多说&#xff0c;我们直接上代码。 源码 import turtle as t t.pencolor(yellow) t.fillcolor("yellow") t.penup() t.go…

全栈笔记_插件篇(谷歌扩展插件开发系列之 manifest.json配置文件)

manifest.json介绍 是web扩展技术必不可少的插件配置文件,放在根目录作用: 指定插件的基本信息 name:名称manifest_version:manifest.json文件的版本号,可以写2或3version:版本description:描述定义插件的行为: browser_action:定义插件在浏览器工具栏中的操作按钮,例…

react 【七】各种hooks的使用/SPA的缺点

文章目录 1、Hook1.1 为什么会出现hook1.2 useState1.3 useEffect1.4 useContext1.5 useReducer1.6 useCallback1.7 useMemo1.8 useRef1.8.1 ref绑定dom1.8.2 ref解决闭包缺陷 1.9 useImperativeHandle1.10 useLayoutEffect1.11 自定义Hook1.11.1 什么是自定义Hook1.11.2 Conte…

Rust 数据结构与算法:3栈:用栈实现符号匹配

1、符号匹配 如&#xff1a; (56)(78)/(43)、{ { ( [ ] [ ])}}、(ab)(c*d)func() 等各类语句的符号匹配。 这里我们关注的不是数字而是括号&#xff0c;因为括号更改了操作优先级&#xff0c;限定了语言的语义&#xff0c;这是非常重要的。如果括号不完整&#xff0c;那么整个…

【Deep Learning 1】神经网络的搭建

&#x1f31e;欢迎来到PyTorch的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年2月16日&a…

消息队列RabbitMQ-使用过程中面临的问题与解决思路

消息队列在使用过程中会出现很多问题 首先就是消息的可靠性&#xff0c;也就是消息从发送到消费者接收&#xff0c;消息在这中间过程中可能会丢失 生产者到交换机的过程、交换机到队列的过程、消息队列中、消费者接收消息的过程中&#xff0c;这些过程中消息都可能会丢失。 …

gem5 garnet 合成流量: packet注入流程

代码流程 下图就是全部. 剩下文字部分是细节补充,但是内容不变: bash调用python,用python配置好configuration, 一个cpu每个tick运行一次,requestport发出pkt. bash 启动 python文件并配置 ./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py \--num-cpus…

安卓游戏开发框架应用场景以及优劣分析

一、引言 在移动游戏开发领域&#xff0c;选择合适的开发框架是项目成功的关键因素之一。特别是对于安卓平台&#xff0c;由于其开放性和庞大的用户基础&#xff0c;不同的游戏开发框架应运而生&#xff0c;旨在帮助开发者高效地构建游戏应用。以下是一些流行的安卓游戏开发框架…

你好,C++(15)0.1*10不等于1.0——4.1.4 关系操作符4.1.5 逻辑操作符

4.1.4 关系操作符 在C中&#xff0c;除了需要用算术操作符对数据进行加减乘除的算术操作之外&#xff0c;我们有时候还需要对数据之间的关系进行操作&#xff0c;也就是对两个数据进行大小比较&#xff0c;得出它们之间的大小关系。在现实世界中&#xff0c;这种大小关系的比较…

vue-组件组成和组件通信(四)

组件的三大组成部分 (结构/样式/逻辑) scoped样式冲突 默认情况&#xff1a;写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 1. 全局样式: 默认组件中的样式会作用到全局 2. 局部样式: 可以给组件加上 scoped 属性, 可以让样式只作用于当前组…

探索未来科技:人工智能与量子计算的新纪元

引言 在这个科技飞速发展的时代&#xff0c;我们正站在一个全新的起点。人工智能&#xff08;AI&#xff09;和量子计算作为两项颠覆性的技术&#xff0c;正引领着科技的未来。在这篇博客中&#xff0c;我们将深入探讨人工智能与量子计算的最新进展&#xff0c;以及它们如何改…

pytorch创建模型方式

1.继承自nn.Module的方式 from torch import nn import torch.nn.functional as F 继承自nn.Moduleclass LModel(nn.Module):def __init__(self):super().__init__()self.L1 nn.Linear(10,10)self.L2 nn.Linear(10,64)self.L3 nn.Linear(64,10)self.L4 nn.Linear(10,5)se…