首页 / JAVA / Java8 Optional 类使用
Java8 Optional 类使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java8 Optional 类使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3193字,纯文字阅读大概需要5分钟。
内容图文
![Java8 Optional 类使用](/upload/InfoBanner/zyjiaocheng/766/3fa45014e6864af199396d0ef23ca8a7.jpg)
public
final
class Optional { … }
Optional 类方法说明
-
of
: 为非 null 的值创建一个 Optional。 创建对象时传入的参数不能为 null。 如果传入参数为 null, 则抛出 NullPointerException -
ofNullable
: 为指定的值创建一个 Optional, 如果指定的值为 null, 则返回一个空的 Optional -
isPresent
: 如果值存在返回 true, 否则返回 false -
get
: 如果 Optional 有值则将其返回, 否则抛出 NoSuchElementException -
ifPresent
: 如果 Optional 实例有值则为其调用 consumer, 否则不做处理 -
orElse
: 如果有值则将其返回, 否则返回指定的其它值 -
orElseGet
: orElseGet 与 orElse 方法类似, 区别在于得到的默认值。 orElse 方法将传入的字符串作为默认值, orElseGet 方法可以接受 Supplier 接口的实现用来生成默认值 -
orElseThrow
: 如果有值则将其返回, 否则抛出 supplier 接口创建的异常 -
map
: 如果有值, 则对其执行调用 mapping 函数得到返回值。 如果返回值不为 null, 则创建包含 mapping 返回值的 Optional 作为 map 方法返回值, 否则返回空 Optional -
flatMap
: 如果有值, 为其执行 mapping 函数返回 Optional 类型返回值, 否则返回空 Optional -
filter
: 如果有值并且满足断言条件返回包含该值的 Optional, 否则返回空 Optional
案例分析
public class AnswerApp {
public static void main(String[] args) throws Exception {
answer(null);
}
private static void answer(User user) {
user = Optional.ofNullable(user).orElse(new User());
// 上一行代码 等价于 下一行代码
// user = (user == null) ? new User() : user;
Map<String, String> map = Maps.newConcurrentMap();
map.put("name", Optional.ofNullable(user.getName()).orElse("AnswerAIL"));
// 上一行代码 等价于 下一行代码
// map.put("name", (user.getName() == null) ? "AnswerAIL" : user.getName());
System.out.println(map);
}
}
程序运行结果
{name=AnswerAIL}
orElse 和 orElseGet 的区别
public class AnswerApp {
public static void main(String[] args) throws Exception {
String name = "AnswerAIL";
System.out.println(Optional.of(name).orElse(AnswerApp.getName()));
System.out.println();
System.out.println(Optional.of(name).orElseGet(AnswerApp::getName));
System.out.println("\n");
String key = null;
System.out.println(Optional.ofNullable(key).orElse(AnswerApp.getName()));
System.out.println();
System.out.println(Optional.ofNullable(key).orElseGet(AnswerApp::getName));
}
private static String getName() {
System.out.println("execute method getName...");
return "answer";
}
}
程序运行结果
execute method getName...
AnswerAIL
AnswerAIL
execute method getName...
answer
execute method getName...
answer
结果验证说明:
当 Optonal 的值是空值时, 无论 orElse 还是 orElseGet 都会执行; 而当返回的 Optional 有值时, orElse 会执行, 而 orElseGet 不会执行。 因此,orElseGet 方法在性能上要优于 orElse 方法
orElseThrow 方法
public class AnswerApp {
public static void main(String[] args) throws Exception {
String value = "optional";
System.out.println("result: " + Optional.ofNullable(value).orElseThrow(() -> new Exception("value is null")));
System.out.println();
Thread.sleep(1000);
String name = null;
System.out.println("result: " + Optional.ofNullable(name).orElseThrow(() -> new Exception("name is null")));
}
}
程序运行结果
result: optional
Exception in thread "main" java.lang.Exception: name is null
at com.answer.AnswerApp.lambda$main$1(AnswerApp.java:40)
at java.util.Optional.orElseThrow(Optional.java:290)
at com.xiwei.AnswerApp.main(AnswerApp.java:40)
内容总结
以上是互联网集市为您收集整理的Java8 Optional 类使用全部内容,希望文章能够帮你解决Java8 Optional 类使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。