détecter dernière itération de boucle foreach
En supposant que j'ai quelques foreach
boucle comme ceci:
Set<String> names = new HashSet<>();
//some code
for (String name: names) {
//some code
}
Est-il un moyen de vérifier à l'intérieur foreach
que le nom réel est le dernier Set
sans compteur?
(Désolé si c'est un doublon de question, je n'ai pas trouvé ici une question de ce genre)
Non, il n'existe pas de méthode sur l'Ensemble de l'interface. Cette abstraction n'implique pas un ordre, seulement que c'est une Collection où chaque élément est unique.
Sans compteur que vous simplement ne pouvez pas le faire en java.
pls dites, que voulez-vous faire si vous savez l'élément courant est le dernier. Gardez à l'esprit que pour chaque sur
Sachez également que le Jeu ne fournit pas de garanties de classement. Le dernier élément que vous avez ajouté peut-être pas le dernier élément de l'itération.
La question est de savoir pourquoi avez-vous besoin pour ce faire. Dans beaucoup, sinon la plupart, des cas, vous pouvez modifier votre algorithme légèrement de sorte qu'il n'est pas nécessaire de connaître l'intérieur de la boucle que vous êtes sur la dernière itération.
Sans compteur que vous simplement ne pouvez pas le faire en java.
pls dites, que voulez-vous faire si vous savez l'élément courant est le dernier. Gardez à l'esprit que pour chaque sur
HashSet
de ne pas maintenir l'ordre.Sachez également que le Jeu ne fournit pas de garanties de classement. Le dernier élément que vous avez ajouté peut-être pas le dernier élément de l'itération.
La question est de savoir pourquoi avez-vous besoin pour ce faire. Dans beaucoup, sinon la plupart, des cas, vous pouvez modifier votre algorithme légèrement de sorte qu'il n'est pas nécessaire de connaître l'intérieur de la boucle que vous êtes sur la dernière itération.
OriginalL'auteur mhery | 2017-01-11
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas, jetez un oeil à Comment se fait la Java "pour chaque" boucle de travail?
Vous devez changer votre boucle d'utiliser un itérateur explicitement ou un int compteur.
Votre mention de itérateur m'a donné l'idée de comment je pourrais être en mesure de résoudre mon problème. Merci
OriginalL'auteur Lazar Petrovic
Pour des raisons de simplicité et d'intelligibilité, de l'omi, de l':
Aussi, ça dépend de ce que vous essayez d'atteindre. Disons que vous êtes la mise en œuvre de l'utilisation de séparer chaque nom de coma, mais ne pas ajouter de vide coma à la fin:
OriginalL'auteur Joao Pereira
Autres answears sont tout à fait adéquates, juste l'ajout de cette solution pour la question posée.
J'avais ajuster à
if(++i == names.size())
, qui ajoute simplement un de je avant d'évaluer, signifie que nous pouvons vérifier directement contre la taille de l'ensemble, sans que -1OriginalL'auteur Edu G
Il n'y a pas d'accumulation dans la méthode pour vérifier si l'élément courant est également le dernier élément. Outre le fait que vous utilisez un
HashSet
qui ne garantit pas l'ordonnance de retour. Même si vous voulez vérifier par exemple avec un indicei
le dernier élément pourrait toujours être un autre.OriginalL'auteur Murat Karagöz
Un
Set
ne garantit pas l'ordre des éléments. Vous pouvez faire une boucle par laSet
la fois et de les récupérer "abc" comme le "dernier point" et la prochaine fois que vous pouvez trouver que "hij" est le "dernier point" dans leSet
.Cela étant dit, si vous n'êtes pas préoccupé par l'ordre et vous voulez juste savoir ce que l'arbitraire "dernier point" est en observant le
Set
à l'heure actuelle, il n'est pas intégré dans la façon de le faire. Vous devez faire usage d'un compteur.OriginalL'auteur CraigR8806
.carte(String::toString) à partir de la réponse ci-dessus est inutile, parce HashSet contient déjà des valeurs de Chaîne. Ne pas utiliser Ensemble pour concaténer des chaînes, car l'ordre n'est pas assurée.
OriginalL'auteur luk4