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 ?
Vous pouvez le vérifier comme vous le faites dans la condition while
:
if ( ! iter.hasNext()) {
// last iteration
...
}
Si iter.hasNext()
est false après iter.next()
, il s'agit du dernier élément.
Bonne codage.
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 = ",";
}
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.
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.
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();
}
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 = "~!~";
}
Que dis-tu de ça:
if (!(iter.hasNext())) {
newsOrAnnouncementInsert.add("~!~");//Delimiter for Multiple Detail Records
}
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.