Подтвердить что ты не робот

Как проверить, обрабатывает ли последний элемент в Iterator?

Если у меня есть итератор, и я хочу проверить последнее значение, как я могу его проверить? Как

private Set<String> saarcCountries = new TreeSet<String>();
Iterator iter = saarcCountries.iterator();

while(iter.hasNext()) {

    String name = (String)iter.next();
    int countryId = Integer.parseInt(name);

    newsOrAnnouncementInsert.add(newsId);
    newsOrAnnouncementInsert.add(countryId);
    newsOrAnnouncementInsert.add(1);            //addby

    if (!(last value in iterator))) {
        newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
    }//end if

} //end of while

Как проверить последнее значение. что должно заменить последнее значение в итераторе?

4b9b3361

Ответ 1

Вы можете проверить его так же, как в состоянии while:

if ( ! iter.hasNext()) {
    // last iteration
    ...
}

Ответ 2

Если iter.hasNext() false после iter.next(), то это последний элемент.

Счастливое кодирование.

Ответ 3

Этот ответ не относится к Iterator, но может использоваться для любого оператора итерации, где вам нужно вставить разделитель между элементами. Ему не нужно знать текущий индекс и не нужно никаких условий.

String previousSeparator = "";
for (String value : collection) {
  System.err.println(previousSeparator + value);
  previousSeparator = ",";
}

Ответ 4

Хотя другие ответы дали некоторые идеи, я думаю, что лучше добавить его без условия и удалить последний разделитель после завершения цикла while.

Ответ 5

Используйте StrBuilder (apache commons lang класс) как тип newsOrAnnouncementInsert. Затем используйте метод StrBuilder.appendSeperator().

Например

StrBuilder newsOrAnnouncementInsert = new StrBuilder();

while (iterator.hasNext())
{
    newsOrAnnouncementInsert.appendSeperator("~!~");

    String name = (String)iter.next();
    int countryId = Integer.parseInt(name);

    newsOrAnnouncementInsert.add(newsId);
    newsOrAnnouncementInsert.add(countryId);
    newsOrAnnouncementInsert.add(1);
}

appendSeperator добавляет только разделитель, если буфер в данный момент не пуст (в этом случае, если это первый раз через цикл).

В принципе, вы хотите инвертировать сравнение. Не проверяйте, находитесь ли вы в последнем элементе itnerator, вместо этого проверьте, чтобы вы не обрабатывали первый элемент. Если не первый элемент, добавьте сепаратор, затем добавьте текущий элемент.

Ответ 6

Этот вопрос старый, ответ хороший, но я использовал этот ответ, чтобы выяснить, как добавить запятые между элементами списка и добавить конец разделителя списка. Если кто-то вроде меня ищет то же самое, что я сделал:

public String toString() {

    StringBuilder sb = new StringBuilder();

    sb.append("List contains:\n");

    Iterator<String> iterator = list.iterator(); 

    while(iterator.hasNext()){

        // Get the next element.
        sb.append(iterator.next());

        // If there is another element add a comma.
        if(iterator.hasNext()){
            sb.append(", ");
        }else{
            sb.append(" ~!~");
        }
    }

    return sb.toString();
}

Ответ 7

Как насчет этого:

if (!(iter.hasNext())) {
    newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
}

Ответ 8

Вы можете использовать метод hasNext, чтобы проверить, является ли это последним значением. Если у вас нет следующих значений, это означает, что это последнее значение.

Ответ 9

Если у вас нет доступа к Iterator, вы можете использовать этот подход.

boolean afterFirst = false;
for(String name : saarcCountries) {
    if(afterFirst)
       newsOrAnnouncementInsert.add("~!~");
    afterFirst = true;

    newsOrAnnouncementInsert.add(newsId);
    newsOrAnnouncementInsert.add(name);
    newsOrAnnouncementInsert.add(1);
} 

Скажите, что это StringBuilder

StringBuilder newsOrAnnouncementInsert = new StringBuidler();
String sep = "";

for(String name : saarcCountries) {
    newsOrAnnouncementInsert.append(sep + newsId + name + 1);
    sep = "~!~";
}