Jdk1.8新特性之Optional

在我们的开发中,NullPointerException可谓是随时随处可见,为了避免空指针异常,我们常常需要进行一些防御式的检查,所以在代码中常常可见if(obj != null) 这样的判断。幸好在JDK1.8中,java为我们提供了一个Optional类,Optional类能让我们省掉繁琐的非空的判断。下面先说一下Optional中为我们提供的方法
// 将执行的值封装成Optional对象
Optional optional = Optional.of(666666);
System.out.println(optional.get());
Optional empty = Optional.empty();
//System.out.println("空值,代码会报错:"+empty.get());

// 将指定的对象封装成一个Optional对象,如果指定值为null则返回一个空Optional对象
Optional nullAbleObj = Optional.ofNullable(666666);
// Optional nullAbleObj = Optional.ofNullable(null);
System.out.println("ofNullable:"+nullAbleObj.get());

// 如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException
System.out.println("get:"+nullAbleObj.get());
String orElseMsg = (String) Optional.empty().orElse("李四");
System.out.println("orElseObj:"+orElseMsg);
//String orElseThrowMsg = (String) Optional.empty().orElseThrow(CustomException::new);
//System.out.println("orElseThrowMsg:"+orElseThrowMsg);

// 过滤Optional中值,也就是对原有的Optional值进行过滤【字符串的截取等等】
Optional stringOptional = Optional.of("zhangsan");
System.out.println(stringOptional.filter(e -> e.length() > 5).orElse("王五"));
stringOptional = Optional.empty();
System.out.println(stringOptional.filter(e -> e.length() > 5).orElse("lisi"));

// map方法传入函数,返回Optional中的数据进行函数处理后返回新数据
Optional str = Optional.of("zhangsan");
String mapStr = str.map(e->e.substring(2,5)).orElse("字符串截取失败");
System.out.println("map:"+mapStr);

// flatMap方法中的lambda表达式返回值必须是Optionl实例,而map方法中的lambda表达式返回值可以是任意类型,在map函数返回之前会包装为Optional。 
str = Optional.of("zhangsan");
System.out.println(stringOptional.flatMap(e -> Optional.of("lisi")).orElse("失败"));

//如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做
Optional ifPresentStr = Optional.of("zhangsan");
ifPresentStr.ifPresent(e-> System.out.println("我被处理了。。。"+e));

// 自定义异常
private static class CustomException extends RuntimeException {
    private static final long serialVersionUID = -4399699891687593264L;

    public CustomException() {
        super("自定义异常");
    }
    public CustomException(String message) {
        super(message);
    }
}
这样代码写起来看的简洁多了:

 

 

你可能感兴趣的:(java)