gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:27:44 25 4
gpt4 key购买 nike

我遇到了一些问题 我有两个类,每个类都返回一个迭代器,有一个类返回名为 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());
}
}
}

最佳答案

首先,不要重复代码,而是使用 OO:

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 中的所有 Student。


更新:

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com