首页 > 其他分享 >Optional对象的使用

Optional对象的使用

时间:2023-05-12 15:44:58浏览次数:60  
标签:对象 Optional System 使用 println null optional out

Optional 是一个对象容器,具有以下两个特点:

  • 提示用户要注意该对象有可能为null

  • 简化if else代码

1. 创建:

  Optional.empty(): 创建一个空的 Optional 实例

  //返回一个Null的optional

  Optional empty = Optional.empty();

  Optional.of(T t): 创建一个 Optional 实例,当 t为null时抛出异常   //of 方法的值不能为空否则会抛出异常   Optional optional1 = Optional.of("hello");      Optional.ofNullable(T t): 创建一个 Optional 实例,但当 t为null时不会抛出异常,而是返回一个空的实例   //ofNullable 传入null不会异常   String str = null;   Optional optional2 = Optional.ofNullable(str);

2. 获取:

  get(): 获取optional实例中的对象,当optional 容器为空时报错

3. 判断:

  isPresent(): 判断optional是否为空,如果空则返回false,否则返回true   orElse(T other): 如果optional不为空,则返回optional中的对象;如果为null,则返回 other 这个默认值   orElseGet(Supplier other): 如果optional不为空,则返回optional中的对象;如果为null,则使用Supplier函数生成默认值other   orElseThrow(Supplier exception): 如果optional不为空,则返回optional中的对象;如果为null,则抛出Supplier函数生成的异常

4. 过滤:

  filter(Predicate p): 如果optional不为空,则执行断言函数p,如果p的结果为true,则返回原本的optional,否则返回空的optional

5. 映射:

  map(Function<t, u=""> mapper): 如果optional不为空,则将optional中的对象 t 映射成另外一个对象 u,并将 u 存放到一个新的optional容器中。   flatMap(Function< T,Optional> mapper): 跟上面一样,在optional不为空的情况下,将对象t映射成另外一个optional

  区别: map会自动将u放到optional中,而flatMap则需要手动给u创建一个optional

6. 示例:

  public class OptionalTest {     public static void main(String[] arg) {     //1.创建Optional对象,如果参数为空直接抛出异常     Optional str=Optional.of("a");     //2.获取Optional中的数据,如果不存在,则抛出异常 System.out.println(str.get());     //3.optional中是否存在数据 System.out.println(str.isPresent());     //4.获取Optional中的值,如果值不存在,返回参数指定的值 System.out.println(str.orElse("b"));     //5.获取Optional中的值,如果值不存在,返回lambda表达式的结果 System.out.println(str.orElseGet(()->new Date().toString()));     //6.获取Optional中的值,如果值不存在,抛出指定的异常 System.out.println(str.orElseThrow(()->new RuntimeException())); Optional<String>       str2=Optional.ofNullable(null);     //7.optional中是否存在数据 System.out.println(str2.isPresent());     //8.获取Optional中的值,如果值不存在,返回参数指定的值 System.out.println(str2.orElse("b"));     //9.获取Optional中的值,如果值不存在,返回lambda表达式的结果 System.out.println(str2.orElseGet(()->new Date().toString()));     //10.获取Optional中的值,如果值不存在,抛出指定的异常 System.out.println(str2.orElseThrow(()->new RuntimeException())); }

标签:对象,Optional,System,使用,println,null,optional,out
From: https://www.cnblogs.com/zhangjiale/p/17394345.html

相关文章

  • echarts 的使用
    <template>//option通过id行绑定  <divid="myRangChart"style="width:100%;height:300px;">  </div></template><scriptsetup>//option引入全部import*asechartsfrom"echarts"import{onMount......
  • 如何使用appuploader制作描述文件​
    如何使用appuploader制作描述文件​承接上文我们讲述了怎么制作证书,本文我们来看下怎么制作描述文件吧。​制作描述文件前我们首先我们来添加一个测试设备,后面再制作描述文件。1.添加测试设备​其中添加设备一项中,根据提示操作添加测试设备,扫码添加即可。​2.描述文件​首......
  • Oracle系列---【oracle使用expdp和impdp实现导入导出】
    一、前提条件两个数据版本和字符集还有语言得一致。#查看数据库版本号selectversionfromv$instance;#查看语言和字符集selectuserenv('language')fromdual;二、创建临时表空间MY_TEMPsu-oraclesqlplus/assysdba;SQL>CREATEDIRECTORYMY_TEMPAS'/OPT/TEM......
  • RabbitMQ Shovel使用
    页面概览创建ShovelVirtualhost:虚拟主机Name:创建Shovel名称Source:源protocol:协议,默认AMQP0.9.1,在AMQP1.0中增加address参数url:源broker的URI。此参数指定要从哪个broker拉取消息queue:要复制的队列名称/exchange:要复制的交换机prefetch-count-消费者应获取的每个请......
  • FactoryIO十字机械手组装工作站仿真实验程序 【程序原创】使用简单的梯形
    FactoryIO十字机械手组装工作站仿真实验程序【程序原创】使用简单的梯形图编写,逻辑清晰,通俗易懂,写有详细注释,起到抛砖引玉的作用,比较适合有动手能力的入门初学者。加工中心的机器人不是真正的机器人,是仿真软件的一个部件,通过简单的IO控制,机器人执行固定的动作。软件环境:1、西门子......
  • 使用Latex制作表格方法总结
    1.前言最近又开始写论文,记录一下使用Latex制作表格的方法2.不同类型表格制作2.1最基本的无线表格:tabbing利用制表位进行表格的排版,但是不会出现表线,另外这个环境对于制表位比较灵活,需要考虑很多因素(制表位的相对位置)才能制作出一个精美的表格.一般来说不是很常用.......
  • UOS下使用HHDESK文本编辑功能
    UOS系统现在正处于起步阶段,许多功能未能完善,这便需要软件支撑。HHDESK的文本编辑功能,便能帮上忙。只需在首页点击文本编辑功能便可。笔者习惯于使用页面分离功能,这样可以随意调节窗口大小。操作为右键标签——分离。建议在设置里面勾选自动换行,更加符合我们的阅读习惯。方便......
  • 在C#中使用WMI
    关于WMI的介绍可以参考https://www.cnblogs.com/zhaotianff/p/14764740.html 在C#中使用主要用到ManagementClass和ManagementObjectSearcher两个类 示例代码如下:1internalclassWMIHelper2{3internalstaticstringGetWmiProperty(stringwmiObj......
  • python配置使用
    一、配置pip源为清华源pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simple二、新建pycharm项目#Newenvironmentusing... 表示选择虚拟python环境#previouslyconfiguredinterpreter 表示可以选择本地的python环境,可再Addinterpreter中添加本......
  • 工程监测NLM5无线中继采集发送仪使用$SETPTool 工具读写参数
    工程监测NLM5无线中继采集发送仪使用$SETPTool工具读写参数 $SETPTool是通用的设备测试、参数读写工具,适用于稳控科技绝大部分设备机器。如果要编写自己的测试工具,可参考“2.通讯协议”章节说明。$SETPToolForNLM5xx的主界面如下图所示。 按照主界面左下角操作提示......