java8 -- optional

Optional 類(java.util.Optional) 時一個容器類,代表一個值存在或者不存在,原來使用 null 表示一個值不存在,現在 Optional 可以更好的表達這個概念。並且可以避免空指針異常。

常用方法:
Optional.of(T t):創建一個 Optional 實例
Optional.empty():創建一個空的 Optional 實例
Optional.ofNullable(T t):若 t 不爲 null,創建 Optional 實例,否則創建空實例
get():獲取容器中的對象
isPresent():判斷是否包含值
orElse(T t):如果調用對象包含值,返回該值,否則返回 t
orElseGet(Suoolier s):如果調用對象包含值,返回該值,否則返回 s 獲取的值
map(Function f):如果有值對其處理,並返回處理後的 Optional,否則返回 Optioanl.empty()
flatMap(Function mapper):與 map 類似,要求返回值必須是 Optional

@Test
public void test1() {
    Optional<Employee> op = Optional.of(new Employee());
    System.out.println(op.get());
}

@Test
public void test2() {
    Optional<Employee> op = Optional.empty();
//        System.out.println(op.get());  // NoSuchElementException 可以快速定位
}

@Test
public void test3() {
    Optional<Employee> op1 = Optional.ofNullable(new Employee());
//        Optional<Employee> op2 = Optional.ofNullable(null); // 創建不會出錯,但是在調用 op2 的時候報錯
    System.out.println(op1.get());
}

@Test
public void test4() {
    Optional<Employee> op2 = Optional.ofNullable(null);
    if (op2.isPresent()) { // 只有當有值的時候在執行
        System.out.println(op2);
    }

    // orElse 當對象不存在的時候使用指定的對象代替他
    Employee employee = op2.orElse(new Employee("張三"));
    System.out.println(employee);

    // 使用 orElseGet 方法可以在函數式接口中書寫其他的業務邏輯
    Employee employee2 = op2.orElseGet(Employee::new);
    System.out.println(employee2);
}

@Test
public void test5() {
    Optional<Employee> op = Optional.ofNullable(new Employee("張三", 45, 5555.55, Employee.Status.FREE));

    Optional<String> str = op.map(Employee::getName);
    System.out.println(str);
}

@Test
public void test6() {
    Optional<Employee> op = Optional.ofNullable(new Employee("張三", 45, 5555.55, Employee.Status.FREE));

    Optional<String> str = op.flatMap((e) -> Optional.of(e.getName()));
    System.out.println(str);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章