sirve recorrer que para objetos lista linkedlist hasnext ejemplo java iterator

java - recorrer - ¿Cómo verificar si procesa el último artículo en un iterador?



recorrer arraylist java foreach (9)

Aunque otras respuestas dieron algunas ideas, creo que es mejor agregarlo sin la condición y eliminar el último delimitador después de que termine el ciclo while.

Si tengo un iterador y quiero verificar el último valor, ¿cómo puedo verificarlo? Me gusta

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

¿Cómo puedo verificar el último valor? ¿Qué debería reemplazar el último valor en el iterador ?


Puede usar el método hasNext para verificar si este es el último valor. Si no tiene ningún próximo valor, esto significa que es el último valor.


Puede verificarlo tal como lo hace en el estado de while :

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


Qué tal esto:

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


Si iter.hasNext() es falso después de iter.next() entonces es el último elemento.

Feliz codificación.


Si no tiene acceso al iterador, puede usar este enfoque.

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

Digamos que es un StringBuilder

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


Utilice StrBuilder (una clase de idioma de Apache commons ) como el tipo de newsOrAnnouncementInsert. Luego use el método StrBuilder.appendSeperator() .

Por ejemplo

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 solo agrega el separador si el búfer no está actualmente vacío (en este caso, si es la primera vez que pasa por el bucle).

Básicamente, quieres invertir la comparación. No verifique si está en el último elemento del generador, en su lugar verifique que no esté procesando el primer elemento. Si no es el primer elemento, agregue el separador y luego agregue el elemento actual.


Esta pregunta es antigua, la respuesta es buena, pero utilicé esta respuesta para descubrir cómo agregar comas entre elementos de la lista y agregar un delimitador al final de la lista. En caso de que alguien más como yo esté buscando lo mismo, esto es lo que hice:

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(); }


Esta respuesta no es específica de un iterador, pero se puede usar para cualquier instrucción iterativa donde necesite insertar un separador entre elementos. No necesita conocer el índice actual ni necesita ninguna condición.

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