首页 > 编程语言 >java Optional使用

java Optional使用

时间:2023-04-11 14:45:08浏览次数:35  
标签:ofNullable optional1 System 使用 println java null Optional

1.Optional.of()或者Optional.ofNullable()
创建Optional对象,差别在于of不允许参数是null,而ofNullable则无限制。

1 // 参数不能是null
2 Optional<Integer> optional1 = Optional.of(1);
3  
4 // 参数可以是null
5 Optional<Integer> optional2 = Optional.ofNullable(null);

2.Optional.empty()
所有null包装成的Optional对象:

1 Optional<Integer> optional1 = Optional.ofNullable(null);
2 Optional<Integer> optional2 = Optional.ofNullable(null);
3 System.out.println(optional1 == optional2);// true
4 System.out.println(optional1 == Optional.<Integer>empty());// true
5  
6 Object o1 = Optional.<Integer>empty();
7 Object o2 = Optional.<String>empty();
8 System.out.println(o1 == o2);// true

3.isPresent()
判断值是否存在

1 Optional<Integer> optional2 = Optional.ofNullable(null);// isPresent判断值是否存在
2 System.out.println(optional1.isPresent() == true);
3 System.out.println(optional2.isPresent() == false);

4.ifPresent(Consumer consumer)
如果option对象保存的值不是null,则调用consumer对象,否则不调用

 1 Optional<Integer> optional1 = Optional.ofNullable(1);
 2 Optional<Integer> optional2 = Optional.ofNullable(null);
 3  
 4 // 如果不是null,调用Consumer
 5 optional1.ifPresent(new Consumer<Integer>() {
 6     @Override
 7     public void accept(Integer t) {
 8         System.out.println("value is " + t);
 9     }
10 });
11  
12 // null,不调用Consumer
13 optional2.ifPresent(new Consumer<Integer>() {
14     @Override
15     public void accept(Integer t) {
16         System.out.println("value is " + t);
17     }
18 });

5.orElse(value)
如果optional对象保存的值不是null,则返回原来的值,否则返回value

1 Optional<Integer> optional1 = Optional.ofNullable(1);
2 Optional<Integer> optional2 = Optional.ofNullable(null);
3  
4 // orElse
5 System.out.println(optional1.orElse(1000) == 1);// true
6 System.out.println(optional2.orElse(1000) == 1000);// true

6.orElseGet(Supplier supplier)
功能与orElse一样,只不过orElseGet参数是一个对象

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);
 
System.out.println(optional1.orElseGet(() -> {
    return 1000;
}) == 1);//true
 
System.out.println(optional2.orElseGet(() -> {
    return 1000;
}) == 1000);//true

7.orElseThrow()

值不存在则抛出异常,存在则什么不做,有点类似Guava的Precoditions

 1 Optional<Integer> optional1 = Optional.ofNullable(1);
 2 Optional<Integer> optional2 = Optional.ofNullable(null);
 3  
 4 optional1.orElseThrow(()->{throw new IllegalStateException();});
 5  
 6 try
 7 {
 8     // 抛出异常
 9     optional2.orElseThrow(()->{throw new IllegalStateException();});
10 }
11 catch(IllegalStateException e )
12 {
13     e.printStackTrace();
14 }

8.filter(Predicate)
判断Optional对象中保存的值是否满足Predicate,并返回新的Optional。

 1 Optional<Integer> optional1 = Optional.ofNullable(1);
 2 Optional<Integer> optional2 = Optional.ofNullable(null);
 3  
 4 Optional<Integer> filter1 = optional1.filter((a) -> a == null);
 5 Optional<Integer> filter2 = optional1.filter((a) -> a == 1);
 6 Optional<Integer> filter3 = optional2.filter((a) -> a == null);
 7 System.out.println(filter1.isPresent());// false
 8 System.out.println(filter2.isPresent());// true
 9 System.out.println(filter2.get().intValue() == 1);// true
10 System.out.println(filter3.isPresent());// false

9.map(Function)
对Optional中保存的值进行函数运算,并返回新的Optional(可以是任何类型)

Optional<Integer> optional1 = Optional.ofNullable(1);
Optional<Integer> optional2 = Optional.ofNullable(null);
 
Optional<String> str1Optional = optional1.map((a) -> "key" + a);
Optional<String> str2Optional = optional2.map((a) -> "key" + a);
 
System.out.println(str1Optional.get());// key1
System.out.println(str2Optional.isPresent());// false

10.flatMap()
功能与map()相似,差别请看如下代码。flatMap方法与map方法类似,区别在于mapping函数的返回值不同。map方法的mapping函数返回值可以是任何类型T,而flatMap方法的mapping函数必须是Optional。

 1 Optional<Integer> optional1 = Optional.ofNullable(1);
 2  
 3 Optional<Optional<String>> str1Optional = optional1.map((a) -> {
 4     return Optional.<String>of("key" + a);
 5 });
 6  
 7 Optional<String> str2Optional = optional1.flatMap((a) -> {
 8     return Optional.<String>of("key" + a);
 9 });
10  
11 System.out.println(str1Optional.get().get());// key1
12 System.out.println(str2Optional.get());// key

 

标签:ofNullable,optional1,System,使用,println,java,null,Optional
From: https://www.cnblogs.com/laoxia/p/17306167.html

相关文章

  • Java 日期
    string和Date的相互转换//string与Date的相互转换用//StringtoDateDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");StringdateTest="2023-4-1114:30:00";Dateparse=null;try{......
  • 推荐一本书《人体使用手册》
    对现代西医的质疑这本书在网上非常流行,但在平面媒体中就难见踪影,大概它是一本中医写的书,而且书中相当地不给西医面子。书中假设人体像一部计算机,将一部20世纪设计的计算机,交给一个19世纪的最优秀的科学家维修,由于缺乏整体设计理论的基础,科学家只能利用解剖的方法,一边拆解,一边研究,换......
  • 本地kafka安装以及使用java作为客户端
    1.使用windows下载kafka地址:https://kafka.apache.org/    下载安装后,使用命令行启动: 进入kafka所在目录,执行命令:   #启动zookeeper命令: bin\windows\zookeeper-server-start.bat.\config\zookeeper.properties#启动kafka命令bin\windows\kafka-server......
  • odoo中用javascript调用model中定义好的方法
    odoo中如果前端界面要调用后台model中写好的方法,很简单。使用do_action即可,比如要调用改res.users的默认语言后执行的方法 odoo.define('switch_language.SwitchLanguageMenu',function(require){"usestrict";varModel=require('web.Model');varse......
  • JavaSE05数组
    1.数组概念:指的是一种容器,可以同来存储同种数据类型的多个值。但是数组容器在存储数据的时候,需要结合隐式转换考虑。比如:定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的,但是byte类型,short类型,int类型的数据是可以存到这个数组里面的。int类型......
  • Jmeter 启动时报错:Not able to find Java executable or version. Please check your
    安装java环境,cmd窗口中执行java-version可以看到java的版本信息。双击jmeter启动文件,报错:NotabletofindJavaexecutableorversion.PleasecheckyourJavainstallation解决办法:在启动文件jmeter.bat中添加java的环境信息SETJAVA_HOME=D:\Ksoftware\openjdk-19.0.2_w......
  • 河北稳控科技多通道振弦传感器无线采集仪如何开始使用
    河北稳控科技多通道振弦传感器无线采集仪如何开始使用 开始使用设备电源VS208~432可使用内置电池(默认)也可使用外部电池工作。需要特别注意:严禁内置和外部电池(电源)同时使用,严重时会造成短路起火,设备永久损坏。电源接口有专门的电池充电端子,可连接充电器或者太阳能电池板为设备......
  • Java中常用算法及示例-分治、迭代、递归、递推、动态规划、回溯、穷举、贪心
    场景1、分治算法的基本思想是将一个计算复杂的问题分成规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终答案。2、穷举(又称枚举)算法的基本思想是从所有可能的情况中搜索正确的答案。3、迭代法(IterativeMethod)无法使用公式一次求解,而需要使用重复结构(即循环)......
  • java配置环境变量采坑
    用几年java了,环境变量还要采坑注意图中JAVA_HOME最后那个“;”,打开之后编辑环境变量的列表里是没有的,你得点击编辑文本把它删了......
  • 解决javascript调用本地sanic接口报跨域错误的问题
    在py代码中利用middleware()方法修饰request/response即可,无需别的操作。 app=Sanic('Sanic_Server')@app.middleware("request")defcors_middle_req(request:Request):"""路由需要启用OPTIONS方法"""ifrequest.method.lower()==......