2017-02-15 6 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)); 

Но у меня нет числа учеников. Есть ли способ получить их по имени, которое находится в классе Student?

+0

итерации по списку, проверьте student.getName() равно поиск и верните, если это произойдет. Поскольку имена не обязательно уникальны, вы можете захотеть вернуть список

+0

, вы можете проверить, присутствует ли имя в списке, student.contains ("dfighter3") – VedX

+0

'student.stream(). Filter (x -> x.equals («name»)). findAny() .EELE (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

Вы можете получить количество элементов в list с помощью student.size(). Кроме того, вы должны использовать тип интерфейса, когда это возможно, в вашем случае 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; 
} 
Смежные вопросы