Optional 的用法

常见的有三种方法创建Optional

创建一个为空的optional实例

    @Testpublic void test_create_empty_optional() {Optional<String> empty = Optional.empty();Assert.assertFalse(empty.isPresent());}

用of 创建的Option实例必须为非空,用ofNullable创建的Option实例可以为空。get获取Optional的值,如果为空的话,会报NoSuchElementException

    @Testpublic void test_create_optional() {Optional<String> opt = Optional.of("not empty");Assert.assertTrue(opt.isPresent());String res = opt.get();System.out.println(res);}@Testpublic void test_create_optional2() {Optional<String> opt = Optional.ofNullable(null);Assert.assertFalse(opt.isPresent());System.out.println(opt.get());}

检查值是否为空

isPresent 和 isEmpty 来查看值是否为空

    @Testpublic void test_present() {Optional<String> opt = Optional.of("present");opt.ifPresent(a -> System.out.println(a.length()));}

orElse 和 orElseGet 

orElse 和 orElseGet 源码,orElse入参是一个泛型T,orElseGet入参是一个Supplier。

    public T orElse(T other) {return value != null ? value : other;}public T orElseGet(Supplier<? extends T> other) {return value != null ? value : other.get();}

如果值为空的话,用赋予默认值 

    @Testpublic void test_else() {String nullName = null;String name = Optional.ofNullable(nullName).orElse("john");System.out.println(name);}@Testpublic void test_elseGet() {Supplier<String> string_supplier = new Supplier<String>() {@Overridepublic String get() {return "john";}};String nullName = null;String name = Optional.ofNullable(nullName).orElseGet(string_supplier);System.out.println(name);}

如果ofNullable不为空,orElse 会有value输出, orElseGet则不会有值。这是因为orElseGet是懒计算,notNullName有值,method不会被调用,而orElse则不是。

    public String method() {System.out.println("value");return "value";}@Testpublic void test_else() {String notNullName = "value present";String name = Optional.ofNullable(notNullName).orElse(method());}@Testpublic void test_elseGet() {String notNullName = "value present";String name = Optional.ofNullable(notNullName).orElseGet(this::method);}

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

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

相关文章

SpringCloud-记

目录 什么是SpringCloud 什么是微服务 SpringCloud的优缺点 SpringBoot和SpringCloud的区别 RPC 的实现原理 RPC是什么 eureka的自我保护机制 Ribbon feigin优点 Ribbon和Feign的区别 什么是SpringCloud Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发…

2024/3/24周报

文章目录 摘要Abstract文献阅读题目引言创新点数据处理研究区域和数据缺失值处理水质相关分析 方法和模型LSTMAttention机制AT-LSTM模型 实验结果 深度学习transformer代码实现1 模型输入1.1 Embedding层1.2 位置编码 2 Encoder2.1 编码器2.2 编码器层2.3注意力机制2.4多头注意…

hive SQL 移位、运算符、REGEXP正则等常用函数

orderflag & shiftleft(1,14) shiftleft(1,14) SQL中使用的运算符号详解_sql中各种符号-CSDN博客 Hive函数_hive shift-CSDN博客 &#xff08;内建函数&#xff08;类型排序&#xff09;_云原生大数据计算服务 MaxCompute(MaxCompute)-阿里云帮助中心&#xff09;

第五讲 哈希表

我们在前面讲了存储层&#xff0c;以及从次磁盘中将页面加载到缓冲池【Buffer Pool】中&#xff0c;现在我们继续往上&#xff0c;来讨论如何支持 DBMS 的执行引擎从页面中读取/写入数据。这部分是访问方法层的功能&#xff0c;它负责通过索引或者表本身&#xff0c;设置是其他…

为什么sql优化往往重点考虑查,而不是增删改

SQL优化重点考虑查询而不是增删改的原因有以下几点&#xff1a; 查询操作的频率高&#xff1a;在大多数数据库应用中&#xff0c;查询操作的频率远高于增删改操作。用户经常需要从数据库中获取数据进行分析、展示或进一步处理。因此&#xff0c;优化查询操作可以显著提高整个系…

Web基础应用

Web基础应用 独立的Web服务 只提供一个页面 构建基本的Web服务 基于 B/S &#xff08;Browser/Server&#xff09;架构的网页服务 服务端提供网页 浏览器下载并显示网页 Hyper Text Markup Language&#xff0c;超文标记语言 Hyper Text Transfer Protocol&#xff0c;超…

Spring JdbcTemplate 案例详解教程

&#xff08;感谢您的关注和点赞支持&#xff01;&#xff09; Spring JdbcTemplate Spring JdbcTemplate 是 Spring Framework 中用于简化 JDBC 操作的一个轻量级封装工具类。它提供了一系列的方法来执行 SQL 查询、更新、批处理等操作&#xff0c;从而减轻了开发者手动处理…

生物信息学文章中常见的图应该怎么看?

目录 火山图 热图 箱线图 森林图 LASSO回归可视化图&#xff08;套索图&#xff09; 交叉验证图 PCA图 ROC曲线图 这篇文章只介绍这些图应该怎么解读&#xff0c;具体怎么绘制&#xff0c;需要什么参数&#xff0c;怎么处理数据&#xff0c;会在下一篇文章里面给出 火山…

Python | 八、类型注解

类型注解 类型注解&#xff08;Type Annotations&#xff09;在Python 3.5及更高版本中被引入。类型注解允许你为函数的参数和返回值指定预期的数据类型。这些注解不会对Python代码的运行时行为产生直接影响&#xff0c;也就是说&#xff0c;它们不会导致代码在运行时进行类型…

python之jsonpath的使用

文章目录 介绍安装语法语法规则举例说明 在 python 中使用获取所有结构所有子节点的作者获取所有子孙节点获取所有价格取出第三本书的所有信息取出价格大于70块的所有书本从mongodb 中取数据的示例 介绍 JSONPath能在复杂的JSON数据中 查找和提取所需的信息&#xff0c;它是一…

Java设计模式之单例模式(多种实现方式)

虽然写了很多年代码&#xff0c;但是说真的对设计模式不是很熟练&#xff0c;虽然平时也会用到一些&#xff0c;但是都没有深入研究过&#xff0c;所以趁现在有空练下手 这章主要讲单例模式&#xff0c;也是最简单的一种模式&#xff0c;但是因为spring中bean的广泛应用&#…

前端面试题《react》

说说React render方法的原理&#xff1f;在什么时候会被触发&#xff1f; render函数里面可以编写JSX&#xff0c;转化成createElement这种形式&#xff0c;用于生成虚拟DOM&#xff0c;最终转化成真实DOM 在 React 中&#xff0c;类组件只要执行了 setState 方法&#xff0c…

151 shell编程

一&#xff0c;我们在终端窗口敲入一个date&#xff0c;系统会返回我们一个结果&#xff0c;这个流程是怎么样子的呢&#xff1f; hunandedehunandede-virtual-machine:~$ date 2024年 03月 24日 星期日 20:32:12 CST当前终端窗口就是 黑屏幕 当我们将date 写入里面并回车的时…

YoloV8改进策略:BackBone改进|PKINet

摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…

C 从函数返回数组

C 语言不允许返回一个完整的数组作为函数的参数。但是&#xff0c;您可以通过指定不带索引的数组名来返回一个指向数组的指针。 如果您想要从函数返回一个一维数组&#xff0c;您必须声明一个返回指针的函数&#xff0c;如下&#xff1a; int * myFunction() { . . . }另外&a…

计算机三级网络技术 选择+大题234笔记

上周停去准备计算机三级的考试啦&#xff0c;在考场上看到题目就知道这次稳了&#xff01;只有一周的时间&#xff0c;背熟笔记&#xff0c;也能稳稳考过计算机三级网络技术&#xff01;

鸿蒙开发学习:【华为支付服务客户端案例】

简介 华为应用内支付服务&#xff08;HUAWEI In-App Purchases&#xff09;支持3种商品&#xff0c;包括消耗型商品、非消耗型商品和订阅型商品。 消耗商品&#xff1a;仅能使用一次&#xff0c;消耗使用后即刻失效&#xff0c;需再次购买。非消耗商品&#xff1a;一次性购买…

计算机常见的知识点(3)

计算机系统 系统的构成 一个完整的计算机系统是由硬件和软件组成 硬件是由运算器、控制器、存储器、输入设备、输出设备五部分组成 其中&#xff1a;中央处理器(简称CPU)运算器控制器 主机中央处理器主存储器 计算机软件包括计算机本身运行所需要的系统软件和用户完成任务…

Mybatis中显示插入数据成功,但在数据库中却没有显示插入的数据

1、在mybatis-config.xml中查看是否添加了JDBC&#xff0c;并引入了映射文件 2、在测试文件中&#xff0c;结尾是否添加提交事务&#xff1a;sqlSession.commit() 添加了这一步就能够将数据提交到数据库中&#xff0c;最后再关闭事务&#xff1a;sqlSession.close() * 如果运…

JWT原理分析

为什么会有JWT的出现&#xff1f; 首先不得不提到一个知识叫做跨域身份验证&#xff0c;JWT的出现就是为了更好的解决这个问题&#xff0c;但是在没有JWT的时候&#xff0c;我们一般怎么做呢&#xff1f;一般使用Cookie和Session&#xff0c;流程大体如下所示&#xff1a; 用…