java8新特性-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


@Test
	public void test06(){
		Optional op=Optional.ofNullable(null);
		Optional map = op.flatMap((e)->Optional.of(e.getAge()));
		System.out.println(map);//Optional.empty
		
		Optional op1=Optional.ofNullable(null);
		Optional map1 = op1.flatMap((e)->Optional.of(e.getAge()));
		System.out.println(map1.orElse(12));//12
		

	}
	@Test
	public void test05(){
		Optional op=Optional.ofNullable(null);
		Optional map = op.map((e)->e.getAge());
		System.out.println(map);//Optional.empty
		
		Optional op1=Optional.ofNullable(new Student("丽丽"));
		Optional map1 = op1.map((e)->e.getName());
		System.out.println(map1);//Optional[丽丽]

	}
	@Test
	public void test04(){
		Optional< Student> op=Optional.ofNullable(new Student("王丽"));
		Student orElseGet = op.orElseGet(()->{
			Student s=new Student("莉莉",12,"ss");
			return s;
		});
		System.out.println(orElseGet);//Student [getName()=王丽, getAge()=0, getSex()=null]
		Optional< Student> op2=Optional.ofNullable(null);
		Student orElseGet2 = op2.orElseGet(()->{
			Student s=new Student("莉莉",12,"ss");
			return s;
		});
		System.out.println(orElseGet2);//Student [getName()=莉莉, getAge()=12, getSex()=ss]
	}
	
	@Test
	public void test03(){
		Student s=null;
		Optional op2 = Optional.ofNullable(s);
		System.out.println("op2==="+op2.isPresent());
		if(!op2.isPresent()){
			System.out.println(op2.orElse(new Student()));
		}
		/**
		 *
Student [getName()=null, getAge()=0, getSex()=null]
		 */
		
	}
	
	@Test
	public void test02(){
	    Student s=null;
	   Optional op1 = Optional.ofNullable(s);
		//System.out.println(op1.get());//null
		System.out.println(op1.orElse(new Student()));
	}
	
	@Test
	public void test01(){
		Optional of = Optional.of(new Student());
	    System.out.println("op"+of.get());
	}
   总结 :使用Optional能更好避免空指针的出现,虽然说还得写代码进行判断,但无疑这个容器类可以使我们少写if,else,增强了代码可读性(讲真if我是不喜欢的),和Lambda也可以在一起使用,在进行复杂自定对象获取做默认的时候也简化了代码。

你可能感兴趣的:(java8,java8新特性,jOptional)