java8 - Optional

 

mport java.util.Optional;

import org.junit.Test;

/*
 * 1、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
 */
public class TestOptional {
    
    @Test
    public void test4(){
        Optional<Employee> op = Optional.of(new Employee(101, "張三", 18, 9999.99));
        
        Optional<String> op2 = op.map(Employee::getName);
        System.out.println(op2.get());
        
        Optional<String> op3 = op.flatMap((e) -> Optional.of(e.getName()));
        System.out.println(op3.get());
    }
    
    @Test
    public void test3(){
        Optional<Employee> op = Optional.ofNullable(new Employee());
        
        if(op.isPresent()){
            System.out.println(op.get());
        }
        
        Employee emp = op.orElse(new Employee("張三"));
        System.out.println(emp);
        
        Employee emp2 = op.orElseGet(() -> new Employee());
        System.out.println(emp2);
    }
    
    @Test
    public void test2(){
        /*Optional<Employee> op = Optional.ofNullable(null);
        System.out.println(op.get());*/
        
//        Optional<Employee> op = Optional.empty();
//        System.out.println(op.get());
    }

    @Test
    public void test1(){
        Optional<Employee> op = Optional.of(new Employee());
        Employee emp = op.get();
        System.out.println(emp);
    }
    
    @Test
    public void test5(){
        Man man = new Man();
        
        String name = getGodnessName(man);
        System.out.println(name);
    }
    
    //需求:獲取一個男人心中女神的名字
    public String getGodnessName(Man man){
        if(man != null){
            Godness g = man.getGod();
            
            if(g != null){
                return g.getName();
            }
        }
        
        return "蒼老師";
    }
    
    //運用 Optional 的實體類
    @Test
    public void test6(){
        Optional<Godness> godness = Optional.ofNullable(new Godness("林志玲"));
        
        Optional<NewMan> op = Optional.ofNullable(new NewMan(godness));
        String name = getGodnessName2(op);
        System.out.println(name);
    }
    
    public String getGodnessName2(Optional<NewMan> man){
        return man.orElse(new NewMan())
                  .getGodness()
                  .orElse(new Godness("蒼老師"))
                  .getName();
    }
}
相關文章
相關標籤/搜索