java - 仅用一个 Iterator Java 迭代两个列表

标签 java arraylist iterator

我遇到了一些问题,我有两个类,每个类都返回一个迭代器,有一个类返回名为 Student 的值。使用这段代码,我可以迭代一个类,我想知道是否有一种方法可以迭代另一个类,而无需在我的 Machine 类中添加第二个类。我的代码如下所示:

import java.util.*;
import java.lang.reflect.*;

class ClassRoom1{
    ArrayList<Student> al = new ArrayList<Student>();
    Student st; 
    public ClassRoom1(){
        st = new Student("Michael", "Smith", 12);
        al.add(st);
        st = new Student("Jennifer", "Lopez", 13);
        al.add(st);
    }

    public void addStudent(String name, String lastName, int age) {
        Student st = new Student(name, lastName, age);
        al.add(st);
    }

    public ArrayList getStudents(){
        return al;
    }

    public Iterator returnIter(){
        Iterator iter = getStudents().iterator();
        return iter;
    }
}

class ClassRoom2{
    ArrayList<Student> al = new ArrayList<Student>();
    Student st; 
    public ClassRoom2(){
        st = new Student("Brian", "Con", 15);
        al.add(st);
        st = new Student("Megan", "Bell", 15);
        al.add(st);
    }

    public void addStudent(String name, String lastName, int age) {
        Student st = new Student(name, lastName, age);
        al.add(st);
    }

    public ArrayList getStudents(){
        return al;
    }

    public Iterator returnIter(){
        Iterator iter = getStudents().iterator();
        return iter;
    }
}

public class Machine{
    Student st;
    ClassRoom1 clrm1 = new ClassRoom1();
    ClassRoom2 clrm2 = new ClassRoom2();    

    public static void main(String[] args){
        Machine mch = new Machine();
        ArrayList al = new ArrayList();
        Iterator iter = al.iterator();
        mch.printStudens(iter);
    }

    void printStudens(Iterator iter){
        iter = clrm1.returnIter();
        while(iter.hasNext()){
            st = (Student) iter.next();
            System.out.println("\nName: " + st.getName() + "\nLast name: " + st.getLastName() + "\nAge: " + st.getAge());
        }
    }
}

最佳答案

首先,不要重复代码,而是使用面向对象:

class ClassRoom{
    private List<Student> al;
    public ClassRoom1(List<Student> studentList){
        a1 = new ArrayList(studentList);
    }

    public void addStudent(String name, String lastName, int age) {
        al.add(new Student(name, lastName, age));
    }

    public List<Student> getStudents(){
        return al;
    }

    public Iterator<Student> returnIter(){
        return getStudents().iterator();
    }
}

那么clrm1clrm2就是ClassRoom的对象。实际上,您可以在自己的列表中保存任意多个 ClassRoom 对象,并进行嵌套迭代,首先是在所有 ClassRoom 上,在其中迭代当前 ClassRoom 中的所有学生。


更新:

如果您曾经需要组合迭代器(这里没有必要),我要么编写自己的小串联迭代器,例如按顺序迭代它所持有的迭代器,或者使用 Guava 的 Iterator.concat() ,“将多个迭代器组合成一个迭代器”。无论哪种方式,您都不必复制任何数据。

关于java - 仅用一个 Iterator Java 迭代两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519846/

相关文章:

java - 在数组列表中查找整数模式的重复项

c# - 通过 C# 生成器的最大独立子集集

java - dom 文档到字符串

java - 在Spring中如何向多个用户发送带有附件的电子邮件

java - LWJGL 项目 java.lang.NoClassDefFoundError

java - Java HashSet 奇怪的迭代器行为

C++,对指向的 map 容器使用迭代器时出错。映射/设置迭代器不可递增

Java:使用 hasNextInt 和 do-while 循环,它会忽略偶数次的整数输入

java - Objective C 相当于 Java 的 ArrayList

java - ArrayList 中存储的数组的逆序