Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用字符串在ArrayList中搜索元素?_Java_Arraylist - Fatal编程技术网

Java 如何使用字符串在ArrayList中搜索元素?

Java 如何使用字符串在ArrayList中搜索元素?,java,arraylist,Java,Arraylist,我正在写一个程序来跟踪学校的班级和学生。我有学校、教室和学生用品。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList 我试图在学校类中编写一个方法,使用字符串名称和字符串classroomName作为参数来删除学生 这就是我到目前为止所做的: public void remove( String studentName, String classroomName) { for(Classroom c : classes) { if(c.clas

我正在写一个程序来跟踪学校的班级和学生。我有学校、教室和学生用品。学校包含教室对象的ArrayList,每个教室包含学生对象的ArrayList

我试图在学校类中编写一个方法,使用字符串名称和字符串classroomName作为参数来删除学生

这就是我到目前为止所做的:

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
。您需要对类进行筛选以获得学生。