代码语言: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);
}
}