Вызов next () дважды в Iterator вызывает исключение NoSuchElementException - PullRequest
4 голосов
/ 21 февраля 2012

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

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

Ответы [ 3 ]

8 голосов
/ 21 февраля 2012

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

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

}

2 голосов
/ 21 февраля 2012

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

while (ai.hasNext()) {
   String ao = ai.next().getImageURL(ImageSize.MEGA);
   if (ai.hasNext())) {
      String an= ai.next().getName();
      ...
   }
}
0 голосов
/ 21 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...