1. 程式人生 > 實用技巧 >Java8-Optional 容器類

Java8-Optional 容器類

1、Optional類是什麼?

Optional<T>類(java.util.Optional)是一個容器類,代表一個值存在或者不存在,原來用null

表示一個值不存在,現在Optional可以更好的表達這個概念。並且可以避免空指標異常。


2、常用方法

①、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


3、demo演示

/**
 * @author houChen
 * @date 2021/1/1 17:10
 * @Description:
 *
 * TestOptional 容器類的常用方法
 */
public class TestOptional {

    /*
    ①、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
     
*/ //of @Test public void test1(){ //【注意】of中不能傳入null Optional<Employee> op = Optional.of(new Employee()); Employee employee = op.get(); System.out.println(employee); } //empty @Test public void test2(){ Optional<Object> empty = Optional.empty(); }
//ofNullable @Test public void test3(){ Optional<Employee> employee = Optional.ofNullable(new Employee()); Optional<Object> onull = Optional.ofNullable(null); System.out.println(onull.get()); //會報錯 } //isPresent @Test public void test4(){ Optional<Object> onull = Optional.ofNullable(null); if(onull.isPresent()){ System.out.println(onull.get()); }else{ System.out.println("物件不包含值"); } } //orElse @Test public void test5(){ Optional<Employee> onull = Optional.ofNullable(null); if(onull.isPresent()){ System.out.println(onull.get()); } Employee e = onull.orElse(new Employee("houchen", 24, 12800d)); System.out.println(e); } //orElseGet(函式式介面) @Test public void test6(){ Optional<Employee> onull = Optional.ofNullable(null); if(onull.isPresent()){ System.out.println(onull.get()); } Employee lisi = onull.orElseGet(() -> new Employee("lisi", 13, 0d)); System.out.println(lisi); } //map @Test public void test7(){ Optional<Employee> op = Optional.ofNullable(new Employee("lisi", 13, 0d)); //將容器中的物件應用到map中的函式上 Optional<String> name = op.map((e) -> e.getName()); System.out.println(name.get()); // flatMap 要求必須返回一個容器類 Optional<String> opname = op.flatMap((e) -> Optional.of(e.getName())); } }