2017-02-15 80 views
-5

我用Java編寫一個程序,我有以下問題:有沒有辦法通過它的名字獲得一個ArrayList元素?

//this is the important part of my class student 
public class Student{ 
    private String name; 

    public Student(String name){ 
     this.name = name; 
    } 

    //Getter 
    public String getName() { 
     return name; 
    } 
} 

//this is the other class (could be the main for example) 
public class Load { 
    private ArrayList<Student> student= new ArrayList<Student>(); 
    student.add(new Student(name)); 
} 

在節目後來我又需要那些學生。我可以這樣得到他們:

System.out.println(student.get(0)); 

但我沒有學生人數。有沒有一種方法可以通過班級學生的姓名來獲取他們?

+0

迭代通過列表,檢查是否student.getName()等於您的搜索並返回,如果有的話。由於名稱不一定是唯一的,你可能想要返回一個列表

+0

你可以檢查列表中是否存在名字student.contains(「dfighter3」) – VedX

+0

'student.stream()。filter(x - > x.equals 「name」))。findAny()。orElse(null)' – px06

回答

2

你可以做的是創建一個函數,它接受一個String作爲輸入,如果該對象被發現搜索student列表並返回。

public Student findStudentByName(String name) { 
    for(Student studentObj : student) { 
     if(studentObj.getName().equals(name)) { 
      return studentObj; 
     } 
    } 
    return null; 
} 
0

在這種情況下,也許你可以使用地圖來保存學生列表。那麼你應該通過名字獲得學生。

Map<String, Student> students = new HashMap<String, Student>(); 
Student maryIn = new Student(); 
maryIn.setName("Mary"); 
students.put(maryIn.getName(), maryIn); 

Student maryOut = students.get("Mary"); 
0

您可以通過使用student.size()得到的list元素的數量。 此外,你應該儘可能使用接口類型,在你的情況List<Student> student = new ArrayList<Student>();

此外,在您的代碼中有一個錯字:student.add(new Student(name));

至於最後一個問題,只需使用內部Load,在當前列表中搜索想要的學生姓名額外的方法:

public Student searchByName(String targetStudentName) { 
    for (Student s : student) { 
     if (targetStudentName.equals(s.getName())) { 
      return s; 
     } 
    } 
    return null; 
} 
相關問題