web-dev-qa-db-fra.com

Boucle Foreach en Java pour une liste d'objets personnalisés

J'ai une ArrayList pour le type Room (mon objet personnalisé) défini comme suit

ArrayList<Room> rooms = new ArrayList<Room>();

Après avoir ajouté une série d’objets à ArrayList, je souhaite les examiner tous et vérifier diverses choses. Je ne suis pas un utilisateur assidu de Java, mais je sais que dans de nombreux autres langages de programmation, une boucle foreach serait le moyen le plus simple de procéder.

Après un peu de recherche, j'ai trouvé le lien suivant qui suggère le code ci-dessous. Comment fonctionne la boucle Java 'for each'?

for(Iterator<String> i = someList.iterator(); i.hasNext(); ) {
  String item = i.next();
  System.out.println(item);
}

Mais pour autant que je sache, cela ne peut pas être utilisé pour un Arraylist d’un objet personnalisé.

Comment puis-je implémenter une boucle foreach pour un ArrayList d’un objet personnalisé? Ou comment pourrais-je traiter autrement chaque article?

4
mr.user1065741

En fait, le amélioré pour la boucle devrait ressembler à ceci

for (final Room room : rooms) {
          // Here your room is available
}
28
ShyJ
for(Room room : rooms) {
  //room contains an element of rooms
}
5
Illyes Istvan

Utiliser peut également utiliser l'API de flux Java 8 et faire la même chose en une seule ligne.

Si vous souhaitez imprimer une propriété spécifique, utilisez cette syntaxe:

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(room -> System.out.println(room.getName()));

OR

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(room -> {
    // here room is available
});

si vous voulez imprimer toutes les propriétés d'un objet Java, utilisez ceci:

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(System.out::println);
3

Vous pouvez corriger votre exemple avec le modèle d'itérateur en modifiant le paramétrage de la classe:

List<Room> rooms = new ArrayList<Room>();
rooms.add(room1);
rooms.add(room2);
for(Iterator<Room> i = rooms.iterator(); i.hasNext(); ) {
  String item = i.next();
  System.out.println(item);
}

ou de manière beaucoup plus simple:

List<Room> rooms = new ArrayList<Room>();
rooms.add(room1);
rooms.add(room2);
for(Room room : rooms) {
  System.out.println(room);
}
2
Jiri Kremser

Si ce code ne fonctionne pas sur tous les éléments de la liste, cela doit être dû au fait que quelque chose déclenche une exception avant d'avoir terminé la liste. le candidat le plus probable est la méthode appelée "insertOrThrow". Vous pouvez insérer cet appel dans une structure try-catch pour gérer l'exception des éléments défaillants sans quitter prématurément la boucle et la méthode.

0
Andriya