En supposant que j'ai une boucle foreach
comme celle-ci:
Set<String> names = new HashSet<>();
//some code
for (String name: names) {
//some code
}
Existe-t-il un moyen de vérifier dans foreach
que le nom réel est le dernier de Set
sans compteur?
(Désolé si c'est une question dupliquée, je n'ai pas trouvé ici une question comme celle-ci)
Il n'y en a pas, jetez un oeil à Comment fonctionne la boucle Java 'for each'?
Vous devez changer votre boucle pour utiliser un itérateur explicitement ou un compteur int.
Pour la simplicité et la compréhensibilité, imo, ferait:
Set<String> names = new HashSet<>();
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
//Do stuff
if (!iterator.hasNext()) {
//last name
}
}
En outre, cela dépend de ce que vous essayez d’atteindre. Supposons que vous implémentez le cas d'utilisation courant consistant à séparer chaque nom par un virgule, sans ajouter de virgule à la fin:
Set<String> names = new HashSet<>();
names.add("Joao");
names.add("Pereira");
//if the result should be Joao, Pereira then something like this may work
String result = names.stream().collect(Collectors.joining(", "));
Les autres réponses sont tout à fait adéquates, il suffit d’ajouter cette solution à la question donnée.
Set<String> names = new HashSet<>();
//some code
int i = 0;
for (String name: names) {
if(i++ == names.size() - 1){
// Last iteration
}
//some code
}
.map (String :: toString) de la réponse ci-dessus est redondant, car HashSet contient déjà des valeurs String. N'utilisez pas Set pour concaténer des chaînes car l'ordre n'est pas assuré.
List<String> nameList = Arrays.asList("Michael", "Kate", "Tom");
String result = nameList.stream().collect(Collectors.joining(", "));
Il n'y a pas de méthode de construction permettant de vérifier si l'élément en cours est également le dernier élément. De plus, vous utilisez une variable HashSet
qui ne garantit pas la commande de retour. Même si vous voulez le vérifier, par exemple avec un index i
, le dernier élément peut toujours être différent.
Un Set
ne garantit pas l'ordre des éléments qu'il contient. Vous pouvez parcourir la Set
une fois et récupérer "abc" en tant que "dernier élément" et la prochaine fois, vous constaterez que "hij" est le "dernier élément" de la Set
.
Cela étant dit, si vous n'êtes pas préoccupé par l'ordre et que vous voulez simplement savoir quel est le "dernier élément" arbitraire lorsque vous observez la Set
à ce moment précis, rien ne permet de le faire. Vous devrez utiliser un compteur.