> ### 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 分布式鎖如何實現