返回Null的Java迭代器

时间:2019-02-07 21:52:08

标签: iterator nosuchelementexception

我正在尝试使用Iterator在Java中编写一个方法,该方法迭代销售商品的一些注释并返回基于注释的投票最有用的注释。但是,在根本没有任何注释的情况下,我希望代码返回null。但是我的问题是下面的代码给了我“没有这样的元素异常”,我该如何解决?

 public Comment findMostHelpfulComment()
{
    Iterator<Comment> it = comments.iterator();
    Comment best = it.next();
    while(it.hasNext()) 
    {
        Comment current = it.next();
        if(current.getVoteCount() > best.getVoteCount()) {
            best = current;
        }

    }
    return best;
} 

3 个答案:

答案 0 :(得分:0)

Comment best = it.next();

如果注释为null,则不会出现此类异常。 您需要检查是否为空,或者在it.hasNext()之前做Comment best = it.next()

答案 1 :(得分:0)

public Comment findMostHelpfulComment() {
    Iterator < Comment > it = comments.iterator();
    Comment best = new Comment();
    while (it.hasNext()) {
        Comment current = it.next();
        if (current.getVoteCount() > best.getVoteCount()) {
            best = current;
        }
    }
    return best;
}

请尝试上面的代码。 声明时最好使用空的it.next()对象,而不是在声明时使用Comment。这样,它将跳过不检查而从Iterator获取数据的情况。

这不会抛出java.util.NoSuchElementException

答案 2 :(得分:0)

public Comment findMostHelpfulComment()
{
    if (comments.isEmpty()== true){
        return null;
    }
    else{

    Iterator<Comment> it = comments.iterator();
    Comment best = it.next();
    while(it.hasNext()) 
    {
        Comment current = it.next();
        if(current.getVoteCount() > best.getVoteCount()) {
            best = current;
        }

    }
    return best;
}

}