java8新特性Optional使用

  • 一、简介
  • 二.API
  • 三.使用案列

一、简介

JAVA8 新特性 Optional 防止空指针的类

二.API

/** 一、Optional 容器类:用于尽量避免空指针异常*   Optional.of(T t) : 创建一个 Optional 实例*    Optional.empty() : 创建一个空的 Optional 实例*  Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例*    isPresent() : 判断是否包含值*  orElse(T t) :  如果调用对象包含值,返回该值,否则返回t*  orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值*    map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()*  flatMap(Function mapper):与 map 类似,要求返回值必须是Optional*/

三.使用案列

public class TestOptional {@Testpublic void test4(){Optional<Employee> op = Optional.of(new Employee(101, "张三", 18, 9999.99));Optional<String> op2 = op.map(Employee::getName);System.out.println(op2.get());Optional<String> op3 = op.flatMap((e) -> Optional.of(e.getName()));System.out.println(op3.get());}@Testpublic void test3(){// 若 t 不为 null,创建 Optional 实例,否则创建空实例Optional<Employee> op = Optional.ofNullable(new Employee());// isPresent() : 判断是否包含值if(op.isPresent()){System.out.println(op.get());}// orElse(T t) :  如果调用对象包含值,返回该值,否则返回tEmployee emp = op.orElse(new Employee("张三"));System.out.println(emp);// orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值Employee emp2 = op.orElseGet(() -> new Employee());System.out.println(emp2);}@Testpublic void test2(){/*Optional<Employee> op = Optional.ofNullable(null);System.out.println(op.get());*///       Optional<Employee> op = Optional.empty();
//      System.out.println(op.get());}@Testpublic void test1(){Optional<Employee> op = Optional.of(new Employee());Employee emp = op.get();System.out.println(emp);}@Testpublic void test5(){Man man = new Man();String name = getGodnessName(man);System.out.println(name);}//需求:获取一个男人心中女神的名字public String getGodnessName(Man man){if(man != null){Godness g = man.getGod();if(g != null){return g.getName();}}return "苍老师";}//运用 Optional 的实体类@Testpublic void test6(){//   Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例Optional<Godness> godness = Optional.ofNullable(new Godness("林志玲"));Optional<NewMan> op = Optional.ofNullable(new NewMan(godness));String name = getGodnessName2(op);System.out.println(name);}public String getGodnessName2(Optional<NewMan> man){return man.orElse(new NewMan())// 如果存在则返回值,否则返回other 。.getGodness().orElse(new Godness("苍老师"))//      // orElse(T t) :  如果调用对象包含值,返回该值,否则返回t.getName();}
}

2021-09-17相关推荐

  1. 实习日志 (2021.09.13)

    2021.09.13星期一 今天把之前的算法题终于给弄明白了,并能够按照自己的思路去把他给完成,总结这个题目并不是很难,最重要的是要把链表给弄懂,一开始由于我对链表不是很熟悉,导致我在写该题目的时候花 ...

  2. 橘子CPS联盟操作手册2021.09

    橘子CPS联盟操作手册2021.09 目录 橘子CPS联盟操作手册2021.09 橘子CPS联盟是干嘛的 橘子CPS基本操作流程 PC端操作 1.注册 2.登陆 3.渠道管理 4.分享网站 5.分享网 ...

  3. [2021.1.17多校省选模拟4]T1(莫比乌斯反演/组合数学/枚举倍数)

    [2021.1.17多校省选模拟4]T1 一般人都会想着去枚举直线的斜率,但是枚举斜率之后就会产生多条直线,并且这些直线的长度不一,难以快速求解,所以我们考虑换一种方法枚举. 枚举最远点对的横纵坐标之 ...

  4. 2021.09.27 MySQL笔记

    2021.09.27 MySQL笔记 文章目录 2021.09.27 MySQL笔记 一.展示当前存在的所有数据库 二.使用(选中)一个数据库 三.创建一个数据表 四.查询并展示该数据库内的所有数据表 ...

  5. 2021.03.17 pokémon小游戏开发记录与周总结

    2021.03.17 pokémon小游戏开发记录与周总结 此篇仅包含部分项目代码,只是个人的学习总结. 文章目录 2021.03.17 pokémon小游戏开发记录与周总结 前言 一.前期准备 二. ...

  6. 2021.09青少年软件编程(Python)等级考试试卷(三级)

    2021.09青少年软件编程(Python)等级考试试卷(三级) 一.单选题(共25题,每题2分,共50分) 1.使用map函数可以实现列表数据元素类型的转换,而无需通过循环.则将列表L=['1',' ...

  7. AWD平台搭建(Cardinal 从零开始) 2021/11/17

    #Time 2021/11/17 因为之后要在校内组织AWD比赛,所以在github上找了一会,试了试最多star的,虽然说好用但是没有好康的界面,全是一堆代码感觉很枯燥,于是最终还是选择了使用Car ...

  8. 2021.09.24—皮皮与帅帅的第二篇情话

    2021.09.24我们小情书的第二天 每天晚上,小兔子都会一个人来到溪水边,坐在地上数着星星.而且他个人也非常喜欢一闪一闪的东西.对于小兔子来说,每颗星星都是特别的,于是她就给每颗星星都起了一个可爱 ...

  9. 西安尚学堂练习09.17|Java编程笔试面试题

    下列哪些类型能被throw语句抛出? A. Error B. Exception C. Throwable D. Object [解]注意Error也是可以被throw的,只是通常Error出现程序就 ...

  10. 《惢客创业日记》2021.09.15(周三)套路的最高境界

    今天,凉粉儿给我发了一段她想的关于惢客的宣传词:"你被套路过吗?想不再被套路吗?上惢客."总结一句话是"不被套路上惢客".我觉得能把惢客跟套路联系在一起,很贴切 ...

最新文章

  1. Exchange Log Collector Script
  2. win2008 IIS7中启用JS的gzip压缩的方法
  3. Iperf源代码分析(八)
  4. java程序员高薪持续的原因有哪些
  5. mel滤波器组频率响应曲线_非常好的滤波器知识总结,值得一看!
  6. 计算机专业Java必读书单,高清PDF电子版下载
  7. mac m1 eclipse汉化操作
  8. matlab 取符号函数,Matlab 符号表达式和符号函数的操作
  9. range在python中什么意思_python中range什么意思?
  10. amesim子模型_AMESim进行实际物理建模及建模的一般过程
  11. oracle plsql 绑定变量值,dbms_sqltune解析SQL的BIND_DATA绑定变量值
  12. 2022.09 青少年软件编程(图形化) 等级考试试卷(四级)
  13. 让人春分日 哈工科教115166.弹珠游戏
  14. 用遗传算法求解TSP问题
  15. js var多等式变量的定义
  16. 使用zip,出现“不可预料的压缩文件末端”问题
  17. 介绍一下Token?
  18. 有效的字母异位词 四种解法(Python)
  19. 花裤衩-nx-admin好多轮子-动态路由
  20. valueOf()方法

热门文章

  1. 黄俊滔:没有人能够打败趋势,将会有大规模公司倒闭
  2. 快速求得 a和 b 的最大公约数
  3. 【Maven】无法下载私服 SNAPSHOT 版本 jar 包
  4. HTML认知06标签学习3
  5. Python的DataFrame中筛选满足某列的值在指定数值内的行
  6. 前端水平垂直居中的方法
  7. Shell编程之循环语句与常用转义字符及一些小实验
  8. 虚拟机搭建ftp服务 匿名用户不能上传、删除、修改,这个问题解决了2个钟头 脑壳疼
  9. html毕业论文的摘要,*毕业论文摘要怎么写 *毕业论文摘要范文参考
  10. ElaticSearch学习笔记