Java обнаруживает элемент в ArrayList классов с итератором [дубликат]

Oct 15 2020

Я не могу найти учебник по этому поводу, кажется, каждый учебник использует ArrayList строк.

Предположим, у вас есть класс Person, у которого есть много атрибутов, включая имя.

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

У вас есть ArrayList людей, и вы хотите найти одного человека в этом ArrayList, и у вас есть только его имя.

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

Как мне найти «Фреда»?

Я знаю, что можно зациклить все элементы в списке, но я хочу сделать это правильно с помощью Iterator.

Кто-нибудь знает учебник, объясняющий, как выполнить поиск в ArrayList с помощью Iterator, чтобы найти элемент, используя только один атрибут этого элемента?

Или это просто невозможно? Я неправильно понял Итератор?

Ответы

1 RohanKumar Oct 15 2020 at 10:07

Как указано в комментариях, подход итератора очень похож на то, что вы делаете со стандартными циклами:

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
}

Если вы используете Java 8 и выше, возможно, вы можете попробовать streams (), они делают это очень компактным:

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