javaoptional 常用用法
Java中的Optional是一个容器对象,它可以包含一个非空值,也可以为空。它的主要作用是在编写代码时避免空指针异常。
java 8 中Optional的完整用法如下:
1. 创建Optional对象
可以通过of()方法创建一个包含非空值的Optional对象,例如:
Optional<String> optional = Optional.of("value");
也可以通过ofNullable()方法创建一个包含可能为空的值的Optional对象,例如:
Optional<String> optional = Optional.ofNullable(null);
2. 获取Optional对象的值
可以通过get()方法获取Optional对象中的非空值,例如:
String value = optional.get();
如果Optional对象中的值为空,调用get()方法会抛出NoSuchElementException异常。因此,在调用get()方法之前,最好先使用isPresent()方法判断Optional对象是否包含一个非空值。
3. 判断Optional对象是否包含非空值
可以使用isPresent()方法判断Optional对象是否包含一个非空值,例如:
if (optional.isPresent()) {
// Optional对象包含非空值
} else {
// Optional对象为空
}
也可以使用ifPresent()方法在Optional对象包含非空值时执行一些操作,例如:
optional.ifPresent(value -> System.out.println(value));
4. 获取Optional对象中的值或默认值
可以使用orElse()方法获取Optional对象中的值或默认值,例如:
String value = optional.orElse("default");
如果Optional对象中的值为空,则返回指定的默认值。
5. 获取Optional对象中的值或抛出异常
可以使用orElseThrow()方法获取Optional对象中的值或抛出异常,例如:
String value = optional.orElseThrow(() -> new RuntimeException("value is null"));
如果Optional对象中的值为空,则抛出指定的异常。
6. 转换Optional对象中的值
可以使用map()方法将Optional对象中的值转换为另一个类型的值,例如:
Optional<Integer> optional = Optional.of("123").map(Integer::parseInt);
如果Optional对象中的值为空,则返回一个空的Optional对象。
7. 过滤Optional对象中的值
可以使用filter()方法过滤Optional对象中的值,例如:
Optional<String> optional = Optional.of("value").filter(value -> value.startsWith("v"));
如果Optional对象中的值不满足指定的过滤条件,则返回一个空的Optional对象。
Java 9 增强
我们介绍了 Java 8 的特性,Java 9 为 Optional 类添加了三个方法:or()、ifPresentOrElse() 和 stream()。
or() 方法与 orElse() 和 orElseGet() 类似,它们都在对象为空的时候提供了替代情况。or() 的返回值是由 Supplier 参数产生的另一个 Optional 对象。
如果对象包含值,则 Lambda 表达式不会执行:
@Test
public void whenEmptyOptional_thenGetValueFromOr() {
User result = Optional.ofNullable(user)
.or( () -> Optional.of(new User("default","1234"))).get();
assertEquals(result.getEmail(), "default");
}
上面的示例中,如果 user 变量是 null,它会返回一个 Optional,它所包含的 User 对象,其电子邮件为 “default”。
ifPresentOrElse() 方法需要两个参数:一个 Consumer 和一个 Runnable。如果对象包含值,会执行 Consumer 的动作,否则运行 Runnable。
如果你想在有值的时候执行某个动作,或者只是跟踪是否定义了某个值,那么这个方法非常有用:
Optional.ofNullable(user).ifPresentOrElse( u -> logger.info("User is:" u.getEmail()),
() -> logger.info("User not found"));
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggakfe
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13