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[哈哈]
	}
}
相关文章
相关标签/搜索