我正在从一个序列中检索多个值,但对于来自同一序列的一组单独的值,需要这样做两次。如果我调用其中一个,我会正确地返回所有内容,但调用next()
两次会得到NoSuchElementException
。在网上读到这篇文章后,我发现在调用next()
一次之后,任何其他时间再次调用它基本上都会返回迭代器false。如何从同一Collection
中获得两组独立的数据?
while (ai.hasNext()) {
String ao = ai.next().getImageURL(ImageSize.MEGA);
String an= ai.next().getName();
}
您可以将next()存储为临时变量。将以下代码中的Object替换为正在迭代的数据类型。
while(ai.hasNext()){
Object temp = ai.next();
String ao = temp.getImageUrl(ImageSize.MEGA);
String an = temp.getName();
}
如果您不确定您的列表中有偶数个元素,您只需要在第二次调用next()
之前添加if (ai.hasNext())
。
while (ai.hasNext()) {
String ao = ai.next().getImageURL(ImageSize.MEGA);
if (ai.hasNext())) {
String an= ai.next().getName();
...
}
}
当您的集合中的元素数量不均匀时,您会遇到此错误,您不应该在不检查是否存在内容的情况下调用next()
两次;你这样做本质上是在突破while loop
的要点。
只要集合中有东西可以得到,next()
就会工作。这是一个在JDK1.6.0_23 上运行良好的代码示例
Collection<String> aCollection = new ArrayList<String>();
aCollection.add("1");
aCollection.add("2");
Iterator<String> i = aCollection.iterator();
String firstString = null;
String secondString = null;
while (i.hasNext()) {
firstString = (String) i.next();
secondString = (String) i.next();
}
System.out.println(firstString);
System.out.println(secondString);
如果将另一个String
添加到Collection
中,则最终会得到一个如您所述的NoSuchElementException
。您要么需要在同一数据上有两个独立的迭代器,要么需要在while
循环中进行另一次检查,以检查集合中是否还有剩余内容,然后再尝试将其取出。