NoSuchElementException当List不为空时使用Collections.min(List,Comparator)

时间:2016-03-23 06:35:11

标签: java nosuchelementexception

我在使用Collections.min时收到NoSuchElementException,我也在网站上阅读了其他相关问题,并了解到如果使用的列表或集合为空,则会收到此异常。但我已经检查过调试代码,列表有值,但我仍然得到异常。

public Date getNewDate(List<MyClass> list1){

    Comparator<MyClass> startDate = new Comparator<MyClass>() {
        @Override
        public int compare(MyClass date1, MyClass date2) {
            return date1.getStartDate().compareTo(date2.getStartDate());
        }
    };

    return Collections.min(list1, startDate).getStartDate();
}

1 个答案:

答案 0 :(得分:5)

当您的第一个信息来源javadoc明确告诉您时,为什么还需要阅读其他相关问题才能了解这一点?

引用Collections.min()的javadoc:

  

如果集合为空,则抛出NoSuchElementException

Ergo,您的收藏集(list1)是空的。

如果您不相信,请尝试捕获并增强错误消息:

try {
    return Collections.min(list1, startDate).getStartDate();
} catch (NoSuchElementException e) {
    throw new RuntimeException("Got NoSuchElementException but list size is " +
                               list.size() + " (list is: " + list + ")", e);
}

向我们展示执行此操作时产生的完整堆栈跟踪,以证明当您获得异常时列表不为空。

这也将向我们展示列表的内容,这是提供a Minimal, Complete, and Verifiable example的一部分。