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

2021-04-13 14:32:22 浏览数 (1)

代码语言:javascript复制
/**
 * 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);
		
	}
		
}

0 人点赞