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();
}