【问题标题】:Java finding item in ArrayList of classes with an Iterator [duplicate]Java在具有迭代器的类的ArrayList中查找项目[重复]
【发布时间】:2021-01-29 18:44:55
【问题描述】:

我找不到这方面的教程,每个教程似乎都使用字符串的 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>();

如何找到“Fred”?

我知道可以循环遍历列表中的所有项目,但我想使用迭代器正确执行此操作。

有谁知道一个教程来解释如何使用迭代器在 ArrayList 上进行查找以仅使用该项目的一个属性来查找项目?

或者这是不可能的?我误解了 Iterator 的意思吗?

【问题讨论】:

  • 向我们展示如何使用 for 循环来做到这一点。迭代器方法几乎相同。
  • 您可以执行与字符串完全相同的操作。唯一不同的是循环的内部,在字符串比较的地方,你应该比较人的名字。
  • Java 约定通常使用大写的类名和变量的驼峰式命名。此外,您不需要在课程结束时使用分号。 ArrayList 语句可以简化为 ArrayList people = new ArrayList;要迭代,做 for (person certainPerson : people) { if (certainPerson.name == "Fred") { //do anything } }
  • 寻找教程的问题离题了,抱歉
  • 使用for-each-loop,你失去了实际的迭代器。如果需要索引,则需要使用显式迭代器。

标签: java arraylist iterator


【解决方案1】:

正如 cmets 中所指出的,迭代器方法与您使用标准循环所做的非常相似:

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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-17
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 2015-03-13
    • 2020-08-19
    相关资源
    最近更新 更多