当前位置: 首页 > news >正文

Optional用法

说明:Optional和Stream一样,是Java8引入的特性,本文介绍Optional的几个实际用法。Steam流使用,参考下面这篇文章:

  • Stream流使用

使用

1.保证值存在

        // 1.保证值存在,pageNumber,pageSizeInteger pageNumber = null;Integer pageSize = null;pageNumber = Optional.ofNullable(pageNumber).orElse(1);pageSize = Optional.ofNullable(pageSize).orElse(10);System.out.println("pageNumber = " + pageNumber + ", pageSize = " + pageSize);

在这里插入图片描述

2.保证值合法

        // 2.保证值合法Integer id = -1;id = Optional.ofNullable(id).filter(e -> e > 0).orElse(1);System.out.println("id = " + id);// 或,不合法时抛出异常id = -1;Optional.ofNullable(id).filter(e -> e > 0).orElseThrow(() -> new IllegalArgumentException("id必须大于0"));

在这里插入图片描述

3.避免多次空判断

有时我们想获取一个对象中的对象的对象的值,如下:

        Country country = new Country("中国", "100001");Address address = new Address("北京", "北京市", "长安街", "北京市长安街", country);Student student = new Student("001", "张三", "男", 18, address);

学生对象中有地址对象,地址对象中有国家对象,当我们要获取该学生的国家名称时,常规情况,我们需要这样:

        // 3.获取该学生的国家名称if (student != null) {Address address1 = student.getAddress();if (address1 != null) {Country country1 = address1.getCountry();if (country1 != null) {String name = country1.getName();if (name != null) {System.out.println("name = " + name);} else {System.out.println("未知");}}}}

在这里插入图片描述

使用Optional就很方便

        // 使用OptionalString name = Optional.ofNullable(student).map(Student::getAddress).map(Address::getCountry).map(Country::getName).orElse("未知");System.out.println("name = " + name);

在这里插入图片描述

总结

以上三个例子,来自阿里云藏经阁电子书《Java工程师必读手册》P294~295,地址如下:

  • 电子书《Java工程师必读手册》地址:https://developer.aliyun.com/ebook/7780

相关文章:

Optional用法

说明:Optional和Stream一样,是Java8引入的特性,本文介绍Optional的几个实际用法。Steam流使用,参考下面这篇文章: Stream流使用 使用 1.保证值存在 // 1.保证值存在,pageNumber,pageSizeInte…...

【观成科技】加密C2框架Xiebro流量分析

一、工具介绍 Xiebro是由Golang和 .NET编写,提供支持的多人和多服务器 C2/后开发框架。它支持多种通信协议,包括TCP、websocket等,并且在客户端与Xiebro服务器之间的通信通常采用AES加密来保障安全性和隐蔽性。 二、工具原理分析 Xiebro C…...

【八大排序算法】插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序

文章目录 一、排序的相关概念二、排序类型三、排序算法实现插入排序1.直接插入排序2.希尔排序 选择排序3.简单选择排序4.堆排序 交换排序5.冒泡排序6.快速排序递归实现非递归实现 7.归并排序递归实现非递归实现 8.计数排序 四、总结 一、排序的相关概念 排序:根据数…...

Flutter 中的 CupertinoActionSheet 小部件:全面指南

Flutter 中的 CupertinoActionSheet 小部件:全面指南 在Flutter中,CupertinoActionSheet是用于在iOS风格的应用中显示动作面板的组件。它提供了一个简洁的界面,让用户可以快速从一组选项中做出选择。CupertinoActionSheet通常伴随着一个或多…...

IDEA 好用的插件

图标插件:Atom Material Icons 此插件的作用就是更好的显示各种文件的类别,使之一目了然 汉化包 Chinese ​(Simplified)​ Language Pack / 中文语言包 作用就是 汉化 AI编码助手 GitHub Copilot AI编码助手:提示代码很好用 缺点&#xff1a…...

leetcode——链表的中间节点

876. 链表的中间结点 - 力扣(LeetCode) 链表的中间节点是一个简单的链表OJ。我们要返回中间节点有两种情况:节点数为奇数和节点数是偶数。如果是奇数则直接返回中间节点,如果是偶数则返回第二个中间节点。 这道题的解题思路是&a…...

稳定网络的诀窍:静态住宅代理解决方案

在数字化时代,网络稳定性对于个人和企业都至关重要。然而,由于多种因素的影响,如地理位置、网络拥堵或网络安全问题等,网络稳定性常常受到挑战。为了应对这些挑战,静态住宅代理作为一种高效且可靠的网络解决方案&#…...

VACode 创建Vue项目完整过程

一、软件下载 VSCode官网下载地址:https://code.visualstudio.com/ 二、下载开发环境 1. 安装 [Node.js](https://nodejs.org/); 2. 安装 [npm](https://www.npmjs.com/) 依赖管理工具; 注:node.js安装完后会同步安装npm,一般…...

【C++】详解C++的模板

目录 概念 ​编辑 语法 函数模板 类模板 非类型模板参数 模板的特化 函数模板特化 类模板特化 全特化 偏特化 分离编译 概念 模板是C中非常厉害的设计,模板把通用的逻辑剥离出来,让不同的数据类型可以复用同一种模板的逻辑,甚至可以…...

1146 -Table ‘performance schema.session variables‘ doesn‘t exist的错误解决

一、问题出现 今天在本地连数据库的时候,发现这个问题,哎呦我擦,差点吓死了 二、解决办法 1)找文件 用everything搜一下MySQL Server 5.7 然后去Windows服务找一下MySQL配置文件的具体路径 如果知道那最好,不知道那…...

练习题(2024/5/13)

1移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示例 2: …...

LeetCode—设计循环队列(两种方法)

1.题目 2.思路一(数组) 通过数组进行模拟,通过操作数组的索引构建一个虚拟的首尾相连的环。再循环队列结构中,设置一个队首head和队尾tail,数组的大小固定为k。 初步分析:存在缺陷 改善假溢出问题&#…...

python “名称空间和作用域” 以及 “模块的导入和使用”

七、名称空间和作用域 可以简单理解为存放变量名和变量值之间绑定关系的地方。 1、名称空间 在 Python 中有各种各样的名称空间: 全局名称空间:每个程序的主要部分定义了全局的变量名和变量值的对应关系,这样就叫做全局名称空间 局部名称…...

Pycharm导入自定义模块报红

文章目录 Pycharm导入自定义模块报红1.问题描述2.解决办法 Pycharm导入自定义模块报红 1.问题描述 Pycharm 导入自定义模块报红,出现红色下划线。 2.解决办法 打开【File】->【Setting】->【Build,Execution,Deployment】->【Console】->【Python Con…...

LLMs之KG-RAG:KG-RAG(基于知识图谱的RAG系统)的简介(可以解决多跳问题/同时支持结构化和非结构化数据查询)、经验技巧、案例应用之详细攻略

LLMs之KG-RAG:KG-RAG(基于知识图谱的RAG系统)的简介(可以解决多跳问题/同时支持结构化和非结构化数据查询)、经验技巧、案例应用之详细攻略 背景痛点:传统的基于向量相似度检索的RAG模型回答多环(多步)问题的能力有限,无法同时处理来自多个文…...

综合模型及应用(图论学习总结部分内容)

文章目录 前言六、综合模型及应用(以题目总结为主)分层图思想(包括拆点建图) e g 1 : 通信线路 eg1:通信线路 eg1:通信线路​​​[A-Telephone Lines](https://ac.nowcoder.com/acm/contest/1055/A)(蓝书例题) e g 2 : 小雨坐地铁 eg2:小雨坐地铁 eg2:小雨坐地铁​ [1012-小雨坐…...

2025考研专业课、英语、数学、政治视频大全,整理全了!

考研季又到了,备考的小伙伴们,你们准备好了吗? 时间管理 考研是一场与时间的赛跑,合理安排时间,让复习更高效! - 制定详细的学习计划,每天、每周、每月都有明确目标 - ‍♂️ 保持一定的学习…...

设计模式之策略模式(一)

背景: 下单时有很多情况,有的是用户下单,有的是卡密下单,有的是下游下单,有的是需要唤起支付,有的不需要支付,这样就需要写很多下单接口,下面使用策略模式优化这种情况 代码结构 com.example.order ├── controller │ └── OrderController.java ├── service │ …...

常见网络攻击及解决方案

网络安全是开发中常常会遇到的情况,为什么会遇到网络攻击,网络攻击是如何进行的,如何抵御网络攻击,都是我们需要思考的问题。 为什么会遇到网络攻击? 以下是一些主要的因素: 技术漏洞:软件或操…...

【挑战30天首通《谷粒商城》】-【第一天】【10 番外篇】 解决docker 仓库无法访问 + MobaXterm连接VirtualBox虚拟机

文章目录 课程介绍 1、解决docker 仓库无法访问 2、 MobaXterm连接VirtualBox虚拟机 Stage 1:下载MobaXterm选择适合你的版本 Stage 2:vagrant ssh 连接,开启ssh访问 Stage 2-1:su获取root账号权限,输入密码(默认vagra…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...

高防服务器价格高原因分析

高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

RabbitMQ 各类交换机

为什么要用交换机&#xff1f; 交换机用来路由消息。如果直发队列&#xff0c;这个消息就被处理消失了&#xff0c;那别的队列也需要这个消息怎么办&#xff1f;那就要用到交换机 交换机类型 1&#xff0c;fanout&#xff1a;广播 特点 广播所有消息​​&#xff1a;将消息…...

Netty自定义协议解析

目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...

day51 python CBAM注意力

目录 一、CBAM 模块简介 二、CBAM 模块的实现 &#xff08;一&#xff09;通道注意力模块 &#xff08;二&#xff09;空间注意力模块 &#xff08;三&#xff09;CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...