英文:
Java finding item in ArrayList of classes with an Iterator
问题
我找不到关于这个的教程,每个教程似乎都使用了一个字符串的ArrayList。
假设你有一个名为Person的类,其中包括很多属性,包括名字。
class Person
{
public String name;
public int age;
public int weight;
public String hair_colour;
public String eye_colour;
};
你有一个Person的ArrayList,你想要在这个ArrayList中找到一个人,你只有他们的名字。
ArrayList<Person> people = new ArrayList<Person>();
我如何找到“Fred”?
我知道可以循环遍历列表中的所有项,但我想要用迭代器来正确地做这个。
有人知道有没有教程来解释如何使用迭代器在ArrayList中进行查找,只使用该项的一个属性来查找项目?
或者这不可能吗?我对迭代器有误解吗?
英文:
I can't find a tutorial of this, every tutorial seems to use an ArrayList of strings.
Suppose you have a class Person which has many attributes including name.
class person
{
public String name;
public int age;
public int weight;
public String hair_colour;
public String eye_colour;
};
You have a ArrayList of persons and you want to find one person in this ArrayList and you only have their name.
ArrayList<person> people = new ArrayList<person>();
How do I find "Fred"?
I know it's possible to loop though all the items in list but I want to do this properly with an Iterator.
Does anyone know of a tutorial to explain how to do a find on an ArrayList using an Iterator to find an item using just one attribute of that item?
Or is this just not possible? Have I misunderstood Iterator's?
答案1
得分: 1
正如评论中指出的那样,迭代器方法与您在标准循环中所做的非常相似:
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)) { // 找到人,返回对象
return p;
}
}
return null; // 未找到返回 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);
}
英文:
As pointed out in comments, iterator approach is very similar to what you do with standard loops:
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
}
If you're using Java 8 and above, maybe you can try out streams(), they make this very compact:
public static Person findPersonByName(List<Person> list, String name) {
return list.stream().filter(p -> name.equals(p.getName())).findFirst().orElse(null);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论