简体   繁体   English

如何迭代不同对象的数组列表

[英]How to iterate the arraylist of diffrent objects

In an ArrayList I have two different objects, Student and Employee . ArrayList我有两个不同的对象StudentEmployee I want to iterate through them one by one. 我想一个一个地遍历它们。 I am able to iterate through the list and use the Employee objects but not the Student objects. 我能够遍历列表并使用Employee对象,但不能使用Student对象。

I have the following code: 我有以下代码:

package javaCollections;

import java.util.ArrayList;
import java.util.Iterator;

class Employee {

    @Override
    public String toString() {
        return "employee [name=" + name + ", age=" + age + "]";
    }

    public String name;
    public int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    Employee(String name, int age) {
        this.age = age;
        this.name = name;
    }

}

class Student {

    @Override
    public String toString() {
        return "student [stud_name=" + stud_name + ", rollNumber=" + rollNumber
                + "]";
    }

    String stud_name;
    int rollNumber;

    public Student(String stud_name, int rollNumber) {
        super();
        this.stud_name = stud_name;
        this.rollNumber = rollNumber;
    }

    public String getStud_name() {
        return stud_name;
    }

    public void setStud_name(String stud_name) {
        this.stud_name = stud_name;
    }

    public int getRollNumber() {
        return rollNumber;
    }

    public void setRollNumber(int rollNumber) {
        this.rollNumber = rollNumber;
    }
}

public class Arraylist {

    ArrayList<Object> emparray;

    public void addemp() {
        Employee emp = new Employee("abc", 12);
        emparray = new ArrayList<Object>();
        emparray.add(emp);
        Employee emp1 = new Employee("def", 12);
        emparray.add(emp1);

        Student std = new Student("efg", 123);
        Student std1 = new Student("xyz", 123);
        emparray.add(std);
        emparray.add(std1);

    }

    public void iterateemp() {
        /*
         * Iterator<Object> itr=emparray.iterator();
         * 
         * while(itr.hasNext()) { System.out.println(itr.next()); }
         */

        for (Object e : emparray) {
            System.out.println(((Employee) e).getAge());
            System.out.println(((Employee) e).getName());
        }
    }

    public static void main(String[] args) {
        Arraylist al = new arraylist();
        al.addemp();
        al.iterateemp();
    }

}

can someone please help me on this? 有人可以帮我吗?

What you need to do is check the instance of the object. 您需要做的是检查对象的实例。

for (Object e : emparray) {
        if(e instanceof employee) {
            System.out.println(((employee) e).getAge());
            System.out.println(((employee) e).getName());
        } else if(e instanceof student) {
            // do something else
        }
    }
}

IMO this is a bad design. IMO这是一个不好的设计。

The best practice is to create common base called Person that has shared fields like name . 最佳做法是创建一个名为Person公共基础,该基础具有诸如name共享字段。 Then you can replace Object with Person in the loop. 然后,您可以在循环中将Object替换为Person

import java.util.ArrayList;
import java.util.Iterator;



interface Person{

     public String getName();
     public void setName(String name);
}

class employee implements Person{


    @Override
    public String toString() {
        return "employee [name=" + name + ", age=" + age + "]";
    }

    public String name;
    public int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    employee(String name, int age) {
        this.age = age;
        this.name = name;
    }

}

class student implements Person{

    @Override
    public String toString() {
        return "student [stud_name=" + name + ", rollNumber=" + rollNumber
                + "]";
    }

    String name;
    int rollNumber;

    public student(String stud_name, int rollNumber) {
        super();
        this.name = stud_name;
        this.rollNumber = rollNumber;
    }


    public int getRollNumber() {
        return rollNumber;
    }

    public void setRollNumber(int rollNumber) {
        this.rollNumber = rollNumber;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void setName(String name) {
        this.name=name;
    }
}

public class arraylist {

    ArrayList<Person> emparray;

    public void addemp() {
        employee emp = new employee("abc", 12);
        emparray = new ArrayList<Person>();
        emparray.add(emp);
        employee emp1 = new employee("def", 12);
        emparray.add(emp1);

        student std = new student("efg", 123);
        student std1 = new student("xyz", 123);
        emparray.add(std);
        emparray.add(std1);

    }

    public void iterateemp() {
        for (Person e : emparray) {
            if (e instanceof employee) {
                System.out.println(((employee) e).getAge());    
            }else{
               /// do for student   
            }
            System.out.println(e.getName());
        }
    }

    public static void main(String[] args) {
        arraylist al = new arraylist();
        al.addemp();
        al.iterateemp();
    }

}
for (Object e : emparray) {
        if(e instanceof employee) {
            System.out.println(((employee) e).getAge());
            System.out.println(((employee) e).getName());
        } else if(e instanceof student) {
            System.out.println(((student) e).getRollNumber());
            System.out.println(((student) e).getStud_name());
        }
    }
}

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

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