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

java-Optional 类详解

目录

前言

Optional的构造方法

Optional的相关方法介绍

isPresent用法:

get用法:

filter用法:

 orElse用法:

 orElseGet用法

orElseThrow用法

map用法

flatMap用法:


前言

Optional 类是java8的新特性,是一个可以为null的容器对象。它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测,很好的解决空指针异常。

Optional的构造方法

1.为value创建一个Optional对象,如果value为空则会报出NullPointerException异常
Optional.of(T value)
2.为value创建一个Optional对象,但允许value为null值。如果传入的值为 null 的话,返回的就是Optional.empty()
Optional.ofNullable(T value)
3.该方法用来构造一个空的 Optional,即该 Optional 中不包含值,其实底层实现还是 如果 Optional 中的 value 为 null 则该 Optional 为不包含值的状态,然后在 API 层面将 Optional 表现的不能包含 null 值,使得 Optional 只存在 包含值 和 不包含值 两种状态。
Optional.empty()

Optional的相关方法介绍

isPresent用法:

1)判断当前value是否为null,如果不为null则返回true,否则false。

2)如果不为null值就执行函数式接口的内容

 用法示例:

    @Testpublic void TestOptional(){UserDto userDto = new UserDto();userDto.setName("high");Optional<UserDto> user = Optional.ofNullable(userDto);user.ifPresent(n-> System.out.println("userdto name is "+ n.getName()));}

get用法:

返回当前的值,如果为空则报异常。

filter用法:

filter 方法接受一个 Predicate 来对 Optional 中包含的值进行过滤,如果包含的值满足条件,那么还是返回这个 Optional;否则返回 Optional.empty。

 用法示例:

    @Testpublic void TestOptional(){UserDto userDto = new UserDto();userDto.setId(1L).setName("high1").setAge(18);Optional<String> name = Optional.ofNullable(userDto).filter(user -> user.getAge() > 19).map(user -> user.getName());System.out.println("name is"+name.orElse("空值"));}

 orElse用法:

如果 Optional 中有值则将其返回,否则返回 orElse 方法传入的参数。

示例:

    @Testpublic void TestOptional(){UserDto userDto = null;UserDto userDto1 = Optional.ofNullable(userDto).orElse(new UserDto().setId(1L).setName("high").setAge(18));System.out.println(userDto1);}

 orElseGet用法

orElseGet和orElse类似,只是orElseGet支持函数式接口来生成other值。

 

 用法示例:

    @Testpublic void TestOptional(){UserDto userDto = null;UserDto userDto1 = Optional.ofNullable(userDto).orElseGet(()->new UserDto().setId(1L).setName("high").setAge(18));System.out.println(userDto1);}

orElseThrow用法

如果有值则返回,没有则用函数式接口抛出生成的异常。

 

用法示例:

    @Testpublic void TestOptional(){UserDto userDto = null;UserDto userDto1 = Optional.ofNullable(userDto).orElseThrow(()->new RuntimeException("没有该用户"));System.out.println(userDto1);}

map用法

如果当前 Optional 为 Optional.empty,则依旧返回 Optional.empty;否则返回一个新的 Optional,该 Optional 包含的是:函数 mapper 在以 value 作为输入时的输出值。

用法示例:

    @Testpublic void TestOptional(){UserDto userDto = new UserDto();userDto.setId(1L).setName("high1").setAge(18);Optional<String> name = Optional.ofNullable(userDto).map(user->user.setName(" high1.1")).map(UserDto::getName).map(String::toUpperCase);System.out.println("name is"+name.orElse("空值"));}

flatMap用法:

与map用法差不多,区别在于 flatMap 要求参数中的函数 mapper 输出的就是 Optional。

 用法:

    @Testpublic void TestOptional(){UserDto userDto = new UserDto();userDto.setId(1L).setName("high1").setAge(18);Optional<String> name = Optional.ofNullable(userDto).flatMap(user->Optional.of(user.setName(" high1.1"))).flatMap(user->Optional.of(user.getName())).flatMap(user->Optional.of(user.toUpperCase()));System.out.println("name is"+name.orElse("空值"));}

http://www.lryc.cn/news/142604.html

相关文章:

  • sql数据库怎么备份,sql 实时备份
  • RK3399平台开发系列讲解(存储篇)Linux 存储系统的 I/O 栈
  • Java“牵手”天猫淘口令转换API接口数据,天猫API接口申请指南
  • postgresql 条件表达式
  • 姜启源数学模型第五版第五章火箭发射升空
  • 局域网中电脑共享文件给手机
  • 线段树练习
  • Mybatis映射.动态sql.分页
  • springboot向resources下写文件的两种方式
  • Sloare flare网卡信息
  • Redis知识点整理
  • React笔记(一)初识React
  • C语言——指针进阶(一)
  • 【ArcGIS Pro二次开发】(62):复制字段
  • 【Tkinter系列02/5】界面初步和布局
  • 2023年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 介绍一些编程语言— CSS 语言
  • 一文讲清楚c/c++中的宏
  • typescript进阶语法
  • 宝塔终端 查看 7003端口 占用 并且杀死
  • 可解释性的相关介绍
  • AUTOSAR规范与ECU软件开发(实践篇)6.7 服务软件组件与应用层软件组件端口连接
  • 菜鸟教程《Python 3 教程》笔记(6):列表
  • LeetCode-56-合并区间
  • Git gui教程---番外篇 gitignore 的文件使用
  • javaee spring 用注解的方式实现ioc
  • Linux基础(二)
  • 155. 最小栈(中等系列)
  • 用python从零开始做一个最简单的小说爬虫带GUI界面(3/3)
  • SpringBoot+Vue如何写一个HelloWorld