首页 > 基础资料 博客日记
Optional常用方法
2024-02-27 07:00:05基础资料围观606次
文章Optional常用方法分享给大家,欢迎收藏Java资料网,专注分享技术知识
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
文章来源:https://blog.csdn.net/weixin_45023719/article/details/130669444
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?