解决java.util.NoSuchElementException: No value present 异常问题
问题描述代码如下Comparator<User> userComparator = Comparator.comparing(User::getCreateT);String recentUserServer = users.stream().max(userComparator).get().getServer();源码分析也就是当get的调用主体查询不到、为空时,就...
·
问题描述

代码如下
Comparator<User> userComparator = Comparator.comparing(User::getCreateT);
String recentUserServer = users.stream().max(userComparator).get().getServer();
源码分析
也就是当get的调用主体查询不到、为空时,就会报 No value present 异常问题
/**
* If a value is present in this {@code Optional}, returns the value,
* otherwise throws {@code NoSuchElementException}.
*
* @return the non-null value held by this {@code Optional}
* @throws NoSuchElementException if there is no value present
*
* @see Optional#isPresent()
*/
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
也就是说当查不到值的时候,Optional会统一处理为抛异常,所以每次取之前都要判断有没有数据,后来发现了这个判断空指针的方法
/**
* Return {@code true} if there is a value present, otherwise {@code false}.
*
* @return {@code true} if there is a value present, otherwise {@code false}
*/
public boolean isPresent() {
return value != null;
}
解决代码
因此代码做如下的判空
Comparator<User> userComparator = Comparator.comparing(User::getCreateT);
String recentUserServer = null;
Optional<User> optional = users.stream().max(userComparator);
if(optional != null && optional.isPresent()) {
recentUserServer = optional.get().getServer();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)