> ### Optional容器
使用Optional容器可以快速的定位NPE,并且在一定程度上可以减少对参数非空检验的代码量。
```
/**
* 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 test() {
Optional<Employee> of = Optional.of(new Employee("zhangsan", 12));
System.out.println(of.get());
// NEP
Optional<Object> of2 = Optional.of(null);
Optional<Object> empty = Optional.empty();
}
@Test
public void test2() {
Optional<Object> empty = Optional.empty();
System.out.println(empty);
// No value present
System.out.println(empty.get());
}
@Test
public void test3() {
Optional<Employee> ofNullable = Optional.ofNullable(new Employee("zhangsan", 12));
System.out.println(ofNullable);
System.out.println(ofNullable.isPresent());
System.out.println(ofNullable.orElse(new Employee("je", 12)));
Optional<Object> ofNullable2 = Optional.ofNullable(null);
System.out.println(ofNullable2);
System.out.println(ofNullable2.isPresent());
System.out.println(ofNullable2.orElse(new Employee("je", 12)));
System.out.println(ofNullable2.orElse(null));
}
@Test
public void test4() {
Optional<Employee> ofNullable = Optional.ofNullable(new Employee("zhangsan", 12));
System.out.println(ofNullable.orElseGet(()-> new Employee()));
Optional<Object> ofNullable2 = Optional.ofNullable(null);
System.out.println(ofNullable2.orElseGet(()-> new Employee()));
}
@Test
public void test5() {
Optional<Employee> ofNullable = Optional.ofNullable(new Employee("zhangsan", 12));
System.out.println(ofNullable.map(e->e.getEmployeeName()));
System.out.print(ofNullable.flatMap(e->Optional.of(e.getEmployeeName())));
}
```
*****
原文链接:https://blog.csdn.net/qq_29411737/article/details/80835658
- 2111总结
- 1.面向对象
- 1.0.1 super()与this()的区别
- 1.0.2 private、default、protected、public的访问范围
- 1.0.3 continue、break、return区别
- 1.0.4 重载和重写的区别
- 1.0.5 final的特点
- 1.0.6 抽象类与接口的区别
- 1.0.7 java类型
- 1.0.8 什么是反射
- 1.0.9 类的加载机制
- 1.1.1 jvm内存结构
- 1.1.2 java垃圾回收机制
- 1.1.3 并发问题
- 1.1.3.1 线程的状态与关系
- 1.1.3.2 并发的三大性质
- 1.1.3.3 线程的实现与使用
- 1.1.3.4 线程池相关
- 1.1.3.5 并发相关方法
- 1.1.3.6 线程相关工具
- 1.1.4 jdk8特性
- 1.1.4.1 lambad表达式的使用
- 1.1.4.2 stream API
- 1.1.4.3 Optional容器使用
- 1.1.4.4 LocalDateTime
- 1.15 io流
- 1.16 动态代理实现
- 2.JavaEE
- 2.0.1 JSP四大作用域九大内置对象
- 2.0.2 cookie与session的区别
- 4.数据库相关
- 5.git版本管理
- 7.一些问题解决
- 7.1 分布式锁如何实现