Élément de recherche Java dans ArrayList of classes with an Iterator [duplicate]

Oct 15 2020

Je ne trouve pas de tutoriel à ce sujet, chaque tutoriel semble utiliser une ArrayList de chaînes.

Supposons que vous ayez une classe Person qui possède de nombreux attributs, dont le nom.

class person
{
    public String name;
    public int age;
    public int weight;
    public String hair_colour;
    public String eye_colour;
 };

Vous avez une ArrayList de personnes et vous voulez trouver une personne dans cette ArrayList et vous n'avez que son nom.

ArrayList<person> people = new ArrayList<person>();

Comment trouver "Fred"?

Je sais qu'il est possible de parcourir tous les éléments de la liste, mais je veux le faire correctement avec un itérateur.

Quelqu'un connaît-il un didacticiel pour expliquer comment effectuer une recherche sur une ArrayList à l'aide d'un itérateur pour trouver un élément en utilisant un seul attribut de cet élément?

Ou n'est-ce pas possible? Ai-je mal compris Iterator?

Réponses

1 RohanKumar Oct 15 2020 at 10:07

Comme indiqué dans les commentaires, l'approche itératrice est très similaire à ce que vous faites avec les boucles standard:

public static Person findPersonByName(List<Person> list, String name) {
    Iterator<Person> it = list.iterator();
    while (it.hasNext()) {
      Person p = it.next();
      if (p.getName().equals(name)) { // Person found, return object
        return p;
      }
    }
    return null; // Not found return NULL
}

Si vous utilisez Java 8 et supérieur, vous pouvez peut-être essayer streams (), ils le rendent très compact:

public static Person findPersonByName(List<Person> list, String name) {
  return list.stream().filter(p -> name.equals(p.getName())).findFirst().orElse(null);
}