รายการค้นหา Java ใน ArrayList ของคลาสที่มี Iterator [ซ้ำกัน]

Oct 15 2020

ฉันไม่พบบทช่วยสอนนี้ทุกบทช่วยสอนดูเหมือนจะใช้ ArrayList ของสตริง

สมมติว่าคุณมีคลาสบุคคลที่มีคุณสมบัติมากมายรวมถึงชื่อ

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 เพื่อค้นหารายการโดยใช้แอตทริบิวต์เดียวของรายการนั้นหรือไม่?

หรือแค่นี้ทำไม่ได้? ฉันเข้าใจผิดของ 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 ขึ้นไปคุณอาจลองใช้สตรีม () ซึ่งทำให้มีขนาดกะทัดรัดมาก:

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