繁体   English   中英

如何迭代在另一个类中声明为 ArrayList 的类对象?

[英]How do I iterate over a class object that is declared as an ArrayList in another class?

所以我有 2 个班级: ClassRoomStudent

在 ClassRoom 中,我使用 Student 类型创建了一个 Arraylist:

public class ClassRoom{
    int classID;
    String className;
    ArrayList<Student> studList = new ArrayList<>();

    public ClassRoom(int classID, String className){
        this.classID = classID;
        this.className = className;
    }

    public String toString(){
        return ("Class ID: " + classID + " Class name: " + className + " Students list: " + studList);
    } 

我也有2个功能。 一个将学生添加到列表中,另一个向每个学生的电话号码发送一条消息。 这是我有点卡住的地方。

    public void addStudent(int studID, String studName, int studPhoneNum){
        Student stud = new Student(studName, studID, studPhoneNum);
        studList.add(stud);
        System.out.println(studList);
    }

    public void sendMessage(int studPhoneNum){
        for (Student phone : studList[studPhoneNum]) {
            System.out.println("Sending message to: " + phone);
        }
    }

我试图了解如何迭代studPhoneNum中的studList值。

当我尝试执行此处粘贴的操作时出现此错误: The type of the expression must be an array type but it resolved to ArrayList<Student>

我很想知道如何解决这个问题。

谢谢

答案很简单。 ArrayList不是数组。 要访问ArrayList的项目,请使用[your_array_list].get([your_index])

所以要迭代一个 ArrayList 你可以使用

for(Student student: studList)
{
  System.out.println("Sending message to: " + student);
}

或者

for(int i=0; i < studList.size(); ++i)
{
  System.out.println("Sending message to: " + studList.get(i));
}

考虑使用 Streams 来优化您的编码:

public void sendMessage(int studPhoneNum){
  Student student = studList.stream().filter(student-> student.studPhoneNum == studPhoneNum).findFirst().get();
  System.out.println("Sending message to: " + student.studName + " at " + student.studPhoneNum);
}

您可以在此处查看实践中的全部内容: https : //repl.it/@randycasburn/Stream-Filter?language=java10&folderId=

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM