Java8新特性之Optional 容器類

概念

Optional<T>類(java.util.Optional)是一個容器類,表明一個值存在或不存在,原來用null表示一個值不存在,如今Optional能夠更好的表達這個概念。而且能夠避免空指針異常。java

經常使用方法

函數     描述
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
package www.muzi.com;

import org.junit.Test;
import www.muzi.com.model.Employee;

import java.util.Optional;

/*
 * 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 {
	//	Optional.of(T t) : 建立一個 Optional 實例
	@Test
	public void test1(){
		Optional<Employee> op = Optional.of(new Employee());
		Employee ep = op.get();
		System.out.println(ep);//Employee{name='null', age=0}
	}

	//Optional.empty() : 建立一個空的 Optional 實例
	@Test
	public void test2(){
		Optional<Employee> op = Optional.empty();
		Employee ep = op.get();
		System.out.println(ep);//由於是空,因此不能獲取值:java.util.NoSuchElementException: No value present
	}

	//Optional.ofNullable(T t):若 t 不爲 null,建立 Optional 實例,不然建立空實例
	@Test
	public void test3(){
		Optional<Employee> op = Optional.ofNullable(new Employee("ee",23));
		//isPresent() : 判斷是否包含值
		/*if (op.isPresent()){
			Employee ep = op.get();
			System.out.println(ep);//Employee{name='null', age=0}
		}else{
			System.out.println("op爲空");
		}*/
		Employee ep = op.orElse(new Employee("哈哈", 20));
		System.out.println(ep);//Employee{name='ee', age=23}
	}
	//orElseGet(Supplier s) :若是調用對象包含值,返回該值,不然返回 s 獲取的值
	@Test
	public void test4(){
		Optional<Employee> op = Optional.ofNullable(null);
		Employee ep = op.orElseGet(() -> new Employee());
		System.out.println(ep);//Employee{name='null', age=0}
	}

	//map(Function f): 若是有值對其處理,並返回處理後的Optional,不然返回 Optional.empty()
	@Test
	public void test5(){
		Optional<Employee> op = Optional.ofNullable(new Employee("哈哈", 20));
		Optional<String> name = op.map((e) -> e.getName());
		System.out.println(name);//Optional[哈哈]
	}
	//flatMap(Function mapper):與 map 相似,要求返回值必須是Optional
	@Test
	public void test6(){
		Optional<Employee> op = Optional.ofNullable(new Employee("哈哈", 20));
		Optional<String> name = op.flatMap((e) -> Optional.of(e.getName()));
		System.out.println(name);//Optional[哈哈]
	}
}
相關文章
相關標籤/搜索