Java 如何使用字符串在ArrayList中搜索元素?
我正在写一个程序来跟踪学校的班级和学生。我有学校、教室和学生用品。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList 我试图在学校类中编写一个方法,使用字符串名称和字符串classroomName作为参数来删除学生 这就是我到目前为止所做的:Java 如何使用字符串在ArrayList中搜索元素?,java,arraylist,Java,Arraylist,我正在写一个程序来跟踪学校的班级和学生。我有学校、教室和学生用品。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList 我试图在学校类中编写一个方法,使用字符串名称和字符串classroomName作为参数来删除学生 这就是我到目前为止所做的: public void remove( String studentName, String classroomName) { for(Classroom c : classes) { if(c.clas
public void remove( String studentName, String classroomName) {
for(Classroom c : classes) {
if(c.className.equals(classroomName)){
//search for student and remove
for(Student s : students){
if(s.studentName.equals(studentName)){
s.remove(studentName);
}
}
}
}
我认为这不起作用,因为学生对象的ArrayList是在课堂上声明的
有没有办法使用非对象参数在对象ArrayList中搜索元素 就像他们告诉您的那样,在迭代时不能从列表中删除元素,除非您使用迭代器或使用索引手动控制迭代 否则,如果您使用的是Java 8,则可以使用:
students.removeIf(s -> s.studentName.equals(studentName));
正如其他人所指出的,您只能使用
迭代器
删除元素。你想要这样的东西:
for(Iterator<Student> it = c.students.iterator(); it.hasNext();)
{
Student s = it.next();
if(s.studentName.equals(studentName))
it.remove();
}
for(Iterator it=c.students.Iterator();it.hasNext();)
{
学生s=it.next();
如果(s.studentName.equals(studentName))
it.remove();
}
你说每个
教室
都包含一个学生的列表
,所以我假设c.Students
是你想要迭代的-你发布的代码使用一个独立的列表学生
。也许这是一个输入错误?在对列表进行迭代时,不能删除列表中的元素(除非显式使用迭代器)。请参阅:您能在嵌套循环中执行c.students
?还有,唐;在对集合进行迭代时,不能同时更改集合。可能的重复项:除此之外,您不希望替换student
中的studentName
(位于内部for循环中)。实际上,您希望替换students
中的s
。您需要对类进行筛选以获得学生。