2012-02-21 2 views
3

Я извлекаю несколько значений из последовательности, но вам нужно сделать это дважды для отдельного набора значений, исходящих из одной и той же последовательности. Если я позвоню одному или другому, все вернется ко мне правильно, но вызов next() дважды приводит к NoSuchElementException. Прочитав об этом в Интернете, я понял, что после вызова next() один раз, в любое другое время после его повторного вызова в основном возвращается итератор false. Как вы получаете два отдельных набора данных от того же Collection?Вызов next() дважды в Iterator вызывает NoSuchElementException

while (ai.hasNext()) { 
    String ao = ai.next().getImageURL(ImageSize.MEGA); 
    String an= ai.next().getName(); 
} 
+0

создать два отдельных итератор над теми же данными. –

ответ

6

Вы можете сохранить следующую() как временную переменную. Замените объект в следующем коде тем типом данных, который вы выполняете.

while(ai.hasNext()){ 
    Object temp = ai.next(); 
    String ao = temp.getImageUrl(ImageSize.MEGA); 
    String an = temp.getName(); 

}

+0

Да, это прекрасно работает. Gracias. – adneal

2

Если вы не уверены, что ваш список содержит четное число элементов, вам просто нужно добавить if (ai.hasNext()) до вашего 2-го вызова next().

while (ai.hasNext()) { 
    String ao = ai.next().getImageURL(ImageSize.MEGA); 
    if (ai.hasNext())) { 
     String an= ai.next().getName(); 
     ... 
    } 
} 
+1

Если вы не уверены, что в вашем списке есть четное количество элементов, вам нужно это сделать. – Thilo

+0

Спасибо, я исправил его. –

0

Вы столкнетесь с этой ошибкой, когда ваша коллекция имеет нечетное количество элементов, вы не должны называть 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, чтобы проверить, осталось ли что-то в коллекции, прежде чем пытаться ее вытащить.

Смежные вопросы