web-dev-qa-db-fra.com

Comment vérifier si traiter le dernier élément d'un itérateur?

Si j'ai un itérateur et que je veux vérifier la dernière valeur, comment puis-je la vérifier? Comme

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

Comment puis-je vérifier la dernière valeur. que doit remplacer dernière valeur dans iterator ?

26
Basit

Vous pouvez le vérifier comme vous le faites dans la condition while:

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

Si iter.hasNext() est false après iter.next(), il s'agit du dernier élément.

Bonne codage.

29
user166390

Cette réponse n'est pas spécifique à un itérateur, mais peut être utilisée pour toute instruction itérative dans laquelle vous devez insérer un séparateur entre les éléments. Il n'a pas besoin de connaître l'index actuel ni aucune condition.

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

Bien que d'autres réponses aient donné quelques idées, je pense qu'il est préférable de l'ajouter sans la condition et supprimer le dernier délimiteur après la fin de la boucle while.

3
MByD

Utilisez StrBuilder (un Apache commons lang class) comme type de newsOrAnnouncementInsert. Ensuite, utilisez la méthode StrBuilder.appendSeperator().

Par exemple

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 ajoute uniquement le séparateur si le tampon n'est pas actuellement vide (dans ce cas, s'il s'agit de la première fois dans la boucle).

En gros, vous voulez inverser la comparaison. Ne vérifiez pas si vous êtes sur le dernier élément de l'itnerator, mais vérifiez que vous ne traitez pas le premier élément. Si ce n'est pas le premier élément, ajoutez le séparateur, puis l'élément actuel.

2
DwB

Cette question est ancienne, la réponse est bonne, mais j'ai utilisé cette réponse pour comprendre comment ajouter des virgules entre les éléments de la liste et ajouter un délimiteur de fin de liste. Si quelqu'un d'autre comme moi cherche la même chose, voici ce que j'ai fait:

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

Si vous n'avez pas accès à l'Iterator, vous pouvez utiliser cette approche.

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

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

Dis que c'est un StringBuilder

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

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

Que dis-tu de ça:

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

Vous pouvez utiliser la méthode hasNext pour vérifier s'il s'agit de la dernière valeur. Si vous n'avez pas de valeurs suivantes, cela signifie que c'est la dernière valeur.

0
Tiago Pasqualini