网站首页 > 博客文章 正文
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-09 java.util.Optional学习笔记(java.util.collection)
- 2024-10-09 如何使用Java8 Optional防止空指针异常?开发者:咋不早告诉我呢
- 2024-10-09 Java8新特性-Stream流&Optional类
- 2024-10-09 Java 8 开始新增的 Optional 类 - 创建 Optional 对象
- 2024-10-09 「Java 8」巧用Optional之优雅规避NPE问题
- 2024-10-09 优雅地解决空指针异常问题:Java8新特性之Optional
- 2024-10-09 JDK8中新增的Optional工具类真的很好用哦,建议收藏
- 2024-10-09 还在重复写空指针检查代码?考虑使用 Optional 吧
- 2024-10-09 Java 8 开始新增的 Optional 类 - Optional 对象中的返回
- 2024-10-09 软件开发 | Java8超实用新特性之——Optional解决空指针问题
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)