Ответ 1
Вы можете проверить его так же, как в состоянии while
:
if ( ! iter.hasNext()) {
// last iteration
...
}
Если у меня есть итератор, и я хочу проверить последнее значение, как я могу его проверить? Как
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
Как проверить последнее значение. что должно заменить последнее значение в итераторе?
Вы можете проверить его так же, как в состоянии while
:
if ( ! iter.hasNext()) {
// last iteration
...
}
Если iter.hasNext()
false после iter.next()
, то это последний элемент.
Счастливое кодирование.
Этот ответ не относится к Iterator, но может использоваться для любого оператора итерации, где вам нужно вставить разделитель между элементами. Ему не нужно знать текущий индекс и не нужно никаких условий.
String previousSeparator = "";
for (String value : collection) {
System.err.println(previousSeparator + value);
previousSeparator = ",";
}
Хотя другие ответы дали некоторые идеи, я думаю, что лучше добавить его без условия и удалить последний разделитель после завершения цикла while.
Используйте 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, вместо этого проверьте, чтобы вы не обрабатывали первый элемент. Если не первый элемент, добавьте сепаратор, затем добавьте текущий элемент.
Этот вопрос старый, ответ хороший, но я использовал этот ответ, чтобы выяснить, как добавить запятые между элементами списка и добавить конец разделителя списка. Если кто-то вроде меня ищет то же самое, что я сделал:
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();
}
Как насчет этого:
if (!(iter.hasNext())) {
newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
}
Вы можете использовать метод hasNext
, чтобы проверить, является ли это последним значением. Если у вас нет следующих значений, это означает, что это последнее значение.
Если у вас нет доступа к 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 = "~!~";
}