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

@Test public void test06(){ Optional<Student> op=Optional.ofNullable(null);
Optional<Integer> map = op.flatMap((e)->Optional.of(e.getAge()));
System.out.println(map);//Optional.empty Optional<Student>
op1=Optional.ofNullable(null); Optional<Integer> map1 =
op1.flatMap((e)->Optional.of(e.getAge()));
System.out.println(map1.orElse(12));//12 } @Test public void test05(){
Optional<Student> op=Optional.ofNullable(null); Optional<Integer> map =
op.map((e)->e.getAge()); System.out.println(map);//Optional.empty
Optional<Student> op1=Optional.ofNullable(new Student("丽丽")); Optional<String>
map1 = op1.map((e)->e.getName()); System.out.println(map1);//Optional[丽丽] }
@Test public void test04(){ Optional< Student> op=Optional.ofNullable(new
Student("王丽")); Student orElseGet = op.orElseGet(()->{ Student s=new
Student("莉莉",12,"ss"); return s; }); System.out.println(orElseGet);//Student
[getName()=王丽, getAge()=0, getSex()=null] Optional< Student>
op2=Optional.ofNullable(null); Student orElseGet2 = op2.orElseGet(()->{ Student
s=new Student("莉莉",12,"ss"); return s; });
System.out.println(orElseGet2);//Student [getName()=莉莉, getAge()=12,
getSex()=ss] } @Test public void test03(){ Student s=null; Optional<Student>
op2 = Optional.ofNullable(s); System.out.println("op2==="+op2.isPresent());
if(!op2.isPresent()){ System.out.println(op2.orElse(new Student())); } /** *
Student [getName()=null, getAge()=0, getSex()=null] */ } @Test public void
test02(){ Student s=null; Optional<Student> op1 = Optional.ofNullable(s);
//System.out.println(op1.get());//null System.out.println(op1.orElse(new
Student())); } @Test public void test01(){ Optional<Student> of =
Optional.of(new Student()); System.out.println("op"+of.get()); }   总结
:使用Optional能更好避免空指针的出现,虽然说还得写代码进行判断,但无疑这个容器类可以使我们少写if,else,增强了代码可读性(讲真if我是不喜欢的),和Lambda也可以在一起使用,在进行复杂自定对象获取做默认的时候也简化了代码。

技术
©2019-2020 Toolsou All rights reserved,
百度、阿里、腾讯内部岗位级别和薪资结构,附带求职建议!免费下载文档:给你介绍几个实用的免费下载网址Bug数能否做为技术人员考核的KPI?C语言编程之查找某学号学生成绩详解ubuntu14.04如何设置静态IPjava实现抢红包功能"头孢就酒 说走就走"?危险!服用这些药物千万别喝酒2021年1月程序员工资统计,平均14915元微软翻译、Office现开始支持因纽特语Java基础知识之笔记总结分享(超详细)