1. 程式人生 > >java8 optional 類的運用

java8 optional 類的運用

常用方法:
    public static <T> Optional<T> of(T value);// 為Optional設值,值為空拋異常
    public static <T> Optional<T> ofNullable(T value) ;// 為Optional設值,值為空不拋異常
    public T get();// 如果Optional中有值,則返回值,否則丟擲 NoSuchElementException 
    public boolean isPresent

() ; // 如果存在值,返回 true,否則返回 false 
    public void ifPresent(Consumer<? super T> consumer) ;// 如果存在值,則使用該值呼叫指定的消費者,否則不執行任何操作。
    public T orElse(T other) ; //如果建立的Optional中有值存在,則返回此值,否則返回一個預設值
    public T orElseGet(Supplier<? extends T> other) ; //如果Optional中有值存在,則返回此值,否則返回一個由Supplier介面生成的值

 

實際應用:

 

    @Test
    public void test1(){
        Optional<User> userOptional = Optional.of(new User("張三","123456",12));

        // 一般使用,不推薦
        if (userOptional.isPresent()) {
            System.out.println(userOptional.get());
        }
        // 推薦函式式寫法
        userOptional.ifPresent(u-> System.out.println(u));



        // school 與 user 是一對多的關係,school 裡面有一個user的集合
        // 若school裡面的user集合不為null,輸出該集合,否則輸出一個空集合


        User user1 = new User("張三","123456",12);
        User user2 = new User("李四","123456",12);
        List<User> userList = Arrays.asList(user1,user2);

        School school = new School();
        school.setUserList(userList);   //此行可註釋,使list為null


        //一般寫法
        List<User> list = school.getUserList();
        if (list!=null) {
            System.out.println(list);
        }else{
            System.out.println(new ArrayList<User>());
        }

        // 函式式寫法
        Optional<School> optionalSchool = Optional.ofNullable(school);
        System.out.println(optionalSchool.map(u -> u.getUserList()).orElse(Collections.emptyList()));

    }