网站首页 > 资源文章 正文
Optional<T>类为java8首次引入,作为一个容器对象,用来处理空值判断逻辑,容器value可能包含也可能不包含非空值。
Optional类主要方法
public boolean isPresent()
public static<T> Optional<T> empty()
public void ifPresent(Consumer<? super T> consumer)
public static <T> Optional<T> of(T value)
public static <T> Optional<T> ofNullable(T value)
public T get()
public T orElse(T other)
public T orElseGet(Supplier<? extends T> other)
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)
对象的判断
先定义一个User对象类,下面举例来说明对对象及其属性的连续判断null值的用法。
public class User {
private String name;
public User(String name) {
this.name = name;
}
public User() { }
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
对于返回指定User对象的用户名称的长度,常规代码如下:
public int getNameLength(User user) {
int len = 0;
if (user != null) {
String name = user.getName();
if (name != null) {
len = name.length();
}
}
return len;
}
如果使用Optional类,编写的代码简单很多。
int len = Optional.ofNullable(user).map(User::getName)
.map(String::length).orElse(0);
列表对象的空值判断
List<User> nullList = null;
List<User> list = Optional.ofNullable(nullList).orElse(Collections.emptyList());
判断完null值后就能进行stream操作
List<Integer> ret = Optional.ofNullable(list).orElse(Collections.emptyList())
.stream().filter(e -> e != null && e.getName() != null)
.map(e -> e.getName())
.map(e -> e.length())
.collect(Collectors.toList());
注意
Optional的get()方法谨慎使用,查看源码可知当容器值为null时会抛出异常。建议使用orElse()方法替代。
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
猜你喜欢
- 2024-10-28 java新特性之Optional类介绍,解决空指针问题的终极类
- 2024-10-28 Jdk14都要出了,还不能使用 Optional优雅的处理空指针?
- 2024-10-28 「Java8」 你有正确的使用 Optional吗?
- 2024-10-28 深入探讨 Pydantic 中的 Optional 和 Union 类型
- 2024-10-28 漫画:你居然不知道 Maven 中 Optional 和 Exclusions 的区别?
- 2024-10-28 Java8-关于Optional的那些事(关于java application)
- 2024-10-28 Jackson 中使用 Optional(jackson string to object)
- 2024-10-28 还在重复写空指针检查代码?考虑使用 Optional 吧
- 2024-10-28 jdk8的optional深入详解(jdk8 document)
- 2024-10-28 Java 中的 Optional(java optional.of)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)