欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Guava学习笔记(1) --- Optional类的基本使用

程序员文章站 2022-06-07 09:46:34
...
/**
 * Optional测试类
 */
public class OptionalTest {

	@Test
	public void test() {
		
		//创建空的Optional对象
		Optional.empty();
				
		//使用非null值创建Optional对象,不能传入null,负责会报错
		//Optional.of(null);
		Optional.of("123");
				
		//使用任意值创建Optional对象
		Optional<Object> nullable = Optional.ofNullable(null);
				
		//判断是否引用缺失的方法(建议不直接使用),这种方法和普通的判断是否为空方法一样的效果
		boolean present = nullable.isPresent();
		//输出结果为false,表示引用不存在,即值为null
		//System.out.println(present);
		
		/**
		 * 判断是否引用缺失,如果不为空(optional引用存在时执行)则执行内部函数
		 * 类似的方法: map filter flatMap
		 */
		nullable.ifPresent(System.out::println);
		
		/**
		 * 当引用缺失时执行并可以自定义返回值
		 */
		String orElse = (String)nullable.orElse("引用缺失");
		System.out.println( "orElse:" + orElse);
		
		/**
		 * 当引用缺失时可以自定义内部函数
		 */
		String orElseGet = (String)nullable.orElseGet(
			() -> 
			{
				return "引用缺失";
			});
		System.out.println("orElseGet:" + orElseGet);
		
		/**
		 * 当引用缺失时抛出异常
		 */
		/*nullable.orElseThrow(
				() ->
				{
					throw new RuntimeException("引用缺失");
				});
		*/
	}
	
	
	/**
	 * 使用流处理方法抛出空指针异常的处理方法
	 */
	private static void stream(List<String> list) {
		list.stream().forEach(System.out::println);
	}
	
	/**
	 * 改进版
	 * @param list
	 */
	private static void streamImprove(List<String> list) {
		Optional.ofNullable(list)
		.map(List::stream)
		//如果为空则创建空的流
		.orElseGet(Stream::empty)
		.forEach(System.out::println);
	}
	
	public static void main(String[] args) {
		
		//如果传入是null则会报空指针异常
		//stream(null);
		
		streamImprove(null);
		
	}
		
}

相关标签: Java