Optional类可以更友好的处理null问题,将if(xxx == null)等类似代码变得更简洁;

Optional类包含的内容:(jdk1.8)

构造Optional类:

Optional类构造方法都是私有的,只能通过Optional类提供的三个静态方法构造:

  1. empty():返回一个空值的Optional实例;
  2. of(T value):返回值为value的Optional实例,value为null抛出空指针异常;
  3. ofNullable(T value):返回值为value或者空值的Optional实例,当value为null时相当于empty();

Optional类提供的方法:(jdk1.8)

  • public boolean equals(Object obj)

判断两个Optional是否相等,相等条件:前提两边都是Optional实例,两边值都为空值或者两边值的equals()相等;

  • public String toString()

value是空值返回“Optional.empty”,否则返回“Optional[value值]”;

  • public T get()

返回value的值,value不存在抛出NoSuchElementException异常;

  • public T orElse(T other)

返回value的值,value不存在返回other;

  • public T orElseGet(Supplier<? extends T> other)

返回value的值,value不存在返回指定Supplier接口返回的值,value不存在且supplier为null抛出空指针异常;

  • public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X

返回value的值,value不存在抛出supplier指定的异常,value不存在且supplier为null抛出空指针异常;

  • public boolean isPresent()

判断value值是否存在,存在返回true,不存在返回false;

  • public void ifPresent(Consumer<? super T> consumer)

如果值存在则执行consumer,值存在且consumer为null时抛出空指针异常;

  • public<U> Optional<U> map(Function<? super T, ? extends U> mapper)

对value进行映射,返回映射后的Optional实例,如果mapper返回null则映射为空的Optional实例,mapper为null抛出空指针异常;

  • public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)

跟map基本一样,不过mapper需返回一个Optional对象,mapper为null或者返回null都将抛出空指针异常;

  • public Optional<T> filter(Predicate<? super T> predicate)

如果值存在并且符合predicate条件则返回当前Optional,否则返回一个空的Optional实例,predicate为null抛出空指针异常;

高版本jdk额外的方法:

  • public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

jdk9新增,如果值存在则执行action,否则执行emptyAction,值存在且action为null或者值不存在切emptyAction为null都将抛出空指针异常;

  • public boolean isEmpty()

jdk11新增,判断值是否不存在,空值返回true,非空值返回false;(跟isPresent()相反)

  • public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

jdk9新增,跟orElseGet基本一样,只是返回值不同,supplier也需返回Optional对象;

  • public T orElseThrow()

jdk10新增,值存在返回该Optional对象,否则返回NoSuchElementException异常;

  • public Stream<T> stream()

jdk9新增,将Optional转换成steam对象;

小demo:

/*** 2022年1月6日下午2:25:25*/
package testOptional;import java.util.Optional;/*** @author XWF**/
public class TestOptional {/*** @param args*/public static void main(String[] args) {Optional<String> opt = Optional.empty();System.out.println("isEmpty:" + opt.isEmpty());System.out.println("isPresent:" + opt.isPresent());opt.ifPresentOrElse(x -> System.out.println("opt=" + x), () -> System.out.println("opt不存在"));System.out.println(opt.orElse("abc"));System.out.println(opt.or(() -> Optional.of("DEF")).map(String::toLowerCase));System.out.println("===========================");opt = Optional.of("XYZ");opt.ifPresent(x -> System.out.println(x + x));System.out.println(opt.filter(x -> x.length() > 5));System.out.println(opt.filter(x -> x.length() <= 5));opt.stream().forEach(System.out::println);}}

执行结果:

jdk1.8——Optional类相关推荐

  1. 【Optional类】JDK1.8新特性之Optional类的使用

    这篇文章,主要介绍JDK1.8新特性之Optional类的使用. 目录 一.Optional类 1.1.Optional类介绍 1.2.Optional属性和方法 (1)value属性 (2)私有构造 ...

  2. Java Optional类源码解析和用法

    个人网站:http://xiaocaoshare.com/ 要求:jdk1.8以上 Optional类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get( ...

  3. Java8 新特性 -- Lambda表达式:函数式接口、方法的默认实现和静态方法、方法引用、注解、类型推测、Optional类、Stream类、调用JavaScript、Base64

    文章目录 1. Lambda表达式 1.1 Lambda表达式语法 1.2 Lambda表达式示例 1.3 说明:函数式接口 2. 方法的默认实现和静态方法 3. 方法引用 3.1 方法引用示例 4. ...

  4. JDK8新特性-Optional类

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 JDK8新特性-Option ...

  5. 如何正确的使用Java8中的Optional类来消除代码中的null检查

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:一书生VOID lw900925.github.io/jav ...

  6. Java 8 Optional 类

    Java 8 Optional 类  Java 8 新特性 Optional 类是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象. ...

  7. Java8新特性 Optional类

    作为开发人员每天与NullPointerException斗智斗勇.每接收到参数或调用方法获得值得判断一下是否为null.稍不留意,空指针异常就像幽灵一样出现了.这篇文章我们来学习Java8是如何通过 ...

  8. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  9. Java 8 Optional类深度解析

    转载自 http://www.importnew.com/6675.html 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先 ...

最新文章

  1. 《ANSYS 14.0超级学习手册》一第2章 高级应用的基石——APDL
  2. 最常见的《最聪明的技巧》实战讲解!
  3. ntu 课程 ERIC(2):Planning your research
  4. 小余学调度:学习记录(2022.2,3)
  5. 考研计算机专业课统考吗,09考研计算机专业课统考增至4部分内容
  6. 关于银行,有哪些有趣的冷知识
  7. 开源的“底线”在哪里?
  8. 将ShaderToy中的Shader搬运到Unity
  9. jquery水平垂直居中_Java Web应用程序集成的jQuery UI选项卡(水平和垂直)示例
  10. 安卓游戏源码-android游戏源码开发-android游戏开发
  11. 单片机ADC分压电阻测量直流电压
  12. 修改mysql的authen_MySQL数据库出现Authentication plugin怎么办
  13. python爬取谷歌学术_JS反爬绕过思路之--谷歌学术镜像网链接抓取
  14. 如何把PPT文件压缩到最小
  15. html 整个页面淡入浅出,css3网页的淡入淡出效果
  16. 一.僵死进程(僵尸进程)
  17. git-flow图解
  18. 用php搭建公众号服务器,如何快速给自己的微信公众号搭建自己的后台服务端
  19. android实现三维动画制作,女娲动画制作
  20. kotlin之字符串

热门文章

  1. 查询社保信息显示内部服务器错误,社保费客户端登录服务器异常
  2. 425 failed to establish connection
  3. 黎明觉醒服务器维护2021,黎明觉醒2021
  4. 百度确认9月初推电脑管家:含杀毒下载功能(转)
  5. Photoshop如何打开、编辑和导出Webp格式图片的方法
  6. 网站架构系统容量评估详解
  7. android 吹裙子,Android吹裙子的实现代码
  8. 网页设计与制作(一)——网页的基本认识
  9. 联想笔记本长时间不用后无法充电问题及解决
  10. C++菜鸡笔记--变量与基本类型