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
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章