我遇到了一些问题,我有两个类,每个类都返回一个迭代器,有一个类返回名为 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();
}
}
那么clrm1
和clrm2
就是ClassRoom的对象。实际上,您可以在自己的列表中保存任意多个 ClassRoom 对象,并进行嵌套迭代,首先是在所有 ClassRoom 上,在其中迭代当前 ClassRoom 中的所有学生。
更新:
如果您曾经需要组合迭代器(这里没有必要),我要么编写自己的小串联迭代器,例如按顺序迭代它所持有的迭代器,或者使用 Guava 的 Iterator.concat()
,“将多个迭代器组合成一个迭代器”。无论哪种方式,您都不必复制任何数据。
关于java - 仅用一个 Iterator Java 迭代两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519846/