解决java.util.NoSuchElementException: No value present 异常问题

问题描述

解决java.util.NoSuchElementException: No value present 异常问题_第1张图片

代码如下

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

你可能感兴趣的:(项目开发debug,No,value,present,NoSuch,ElementExcepti)