Java8之Optional類

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

package com.alisa.java8.optional;

import com.alisa.java8.entity.Employee;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.omg.Messaging.SYNC_WITH_TRANSPORT;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Optional;

/*
* 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
* */
@RunWith(SpringRunner.class)
@SpringBootTest
public class OptionalTest {
    @Test
    public void test1() {
        Optional<Employee> op = Optional.of(new Employee());
        Employee emp = op.get();
        System.out.println(emp);
    }

    @Test
    public void test2() {
        Optional<Employee> op = Optional.ofNullable(new Employee());
        if (op.isPresent()) {
            System.out.println(op.get());
        }
        Employee emp1 = op.orElse(new Employee("Alisa"));
        System.out.println(emp1);
        Employee emp2 = op.orElseGet(() -> new Employee());
        System.out.println(emp2);
    }

    @Test
    public void test3() {
        Optional<Employee> op1 = Optional.of(new Employee(101, "alisa", 18, 111111));
        Optional<String> op2 = op1.map(Employee::getName);
        System.out.println(op2.get());
        Optional<String> op3 = op1.flatMap((e) -> Optional.of(e.getName()));
        System.out.println(op3.get());
        int i  = (int)(10+Math.random()*11);
        System.out.println(i);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章