optional 是Java8 util包中的类,我们为了避免空指针异常(NullPointerException),经常要写好多类似if(a!=null){...},optional就是为了解决这些问题,让代码看起来更nb。

(一)Optional.ofNullable(e).ifPresent()

         此方法是当传入的对象为不为空(e!=null)时,才会执行ifPresent()中的代码,e==null时什么都不会执行,也不会抛异常。

//空对象 不会执行
Optional.ofNullable(null).ifPresent(e -> {
    System.out.println("空");
});
//空字符串时会执行 
Optional.ofNullable("").ifPresent(e -> {
    System.out.println("空字符串");
});
//空格 也会执行
Optional.ofNullable(" ").ifPresent(e -> {
   System.out.println("空格");
});
        

输出:

空字符串
空格 

(二)Optional.ofNullable(e).orElse()

        orElse()方法,当 Optional 中有值则将其返回,为空时返回 orElse 方法传入的参数。

        此方法可以替代三目运算符使用。

//为空时返回orElse中的值
System.out.println(Optional.ofNullable(null).orElse("默认值"));
//输出 默认值

//不为空时
System.out.println(Optional.ofNullable("我不是空").orElse("默认值"));
//输出 我不是空

 (三)Optional.ofNullable(e).orElseGet()

orElseGet方法,当Optional 中值为空时,orElseGet与orElse效果是一样的。当Optional 中有值时,两者才有区别,上代码。

//当参数为空时
String a = (String) Optional.ofNullable(null).orElse(get("a"));
System.out.println("a="+a);
String b = (String) Optional.ofNullable(null).orElseGet(() -> get("b"));
System.out.println("b="+b);

输出
a:我执行了
a=a
b:我执行了
b=b

//参数不为空是
String c = Optional.ofNullable("notnull").orElse(get("c"));
System.out.println("c="+c);
String d =  Optional.ofNullable("我不是空").orElseGet(() -> get("d"));
System.out.println("d="+d);

输出

c:我执行了
c=notnull
(此处没有 执行)
d=我不是空

private static String get(String s) {
       System.out.println(s + ":我执行了");
        return s;
 }

可以看到,当参数不为空时,orElseGet中的方法是没有执行的。

(四)Optional.ofNullable(e).filter()

        filter个方法通过传入的定条件对Optional实例的值进行过滤,它可以配合着.ifPresent()方法和.orElse()使用

Optional.ofNullable("notnull").filter(t -> "notnull".equals(t)).ifPresent(t2 -> System.out.println("成立时我才会执行"));

输出
成立时我才会执行

String a=Optional.ofNullable("notnull").filter(t -> "null".equals(t)).orElse(("不成立时我才会执行"));
System.out.println("a="+a);

String b=Optional.ofNullable("notnull").filter(t -> "notnull".equals(t)).orElse(("不成立时我才会执行"));
System.out.println("b="+b);

输出
a=不成立时我才会执行
b=notnull

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐