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
猜你喜欢
- 11天前(从“见世面”到“内在需要”:在海南,追问旅行的意义)从“见世面”到“内在需要”:在海南,追问旅行的意义
- 11天前(瑞士大酒店-自助餐怎么样)瑞意心旅,以食为先 瑞士酒店开启全新"瑞士早餐计划"
- 11天前(艾美酒店连锁)艾美酒店全球夏日计划回归,联手Wishbone主厨推出创新冰饮
- 11天前(三亚太阳湾柏悦度假酒店)三亚太阳湾柏悦酒店携手ROSEONLY诺誓缔造浪漫七夕
- 11天前(2025年“文化和自然遗产日”广东主会场活动举办)2025年“文化和自然遗产日”广东主会场活动举办
- 11天前(甘肃文化旅游宣传片)甘肃文旅推介走进重庆
- 11天前(“清透会呼吸”轻松拿捏春日出游氛围感)“清透会呼吸”轻松拿捏春日出游氛围感
- 11天前(美诺酒店集团旗下臻选品牌m collection)美诺酒店集团启动盛橡品牌战略焕新 开启全球扩张新篇章
- 11天前(2025年安徽省“百场黄梅唱响百家景区”示范展示启动)2025年安徽省“百场黄梅唱响百家景区”示范展示启动
- 11天前(海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章