簡體   English   中英

兩種不同類類型的arraylist的迭代哈希圖

[英]Iterating hashmap of arraylist of two different Class types

我必須創建一個arraylist的哈希表,但是arraylist的類型可以是StudentRecord或TeacherRecord(這是兩個不同的類),我添加了兩個記錄,但是我無法使用顯示方法遍歷hashmap的內容。有人可以幫助我嗎?定義顯示功能?

public class StudentRecord 
    {
        String first_Name;
        String last_Name;
        String [] courses_Registered;
        String status;
        Date date;

    StudentRecord(String f_name,String l_name,String [] courses,String status,Date dat )
    {
        this.first_Name=f_name;
        this.last_Name=l_name;
        this.courses_Registered=courses;
        this.status=status;
        this.date=dat;
    }

}

public class TeacherRecord 
{
    String first_Name;
    String last_Name;
    String address;
    String phone;
    String specilization;
    String location;

    TeacherRecord(String f_name,String l_name,String addr,String number,String spec,String loc )
    {
        this.first_Name=f_name;
        this.last_Name=l_name;
        this.address=addr;
        this.phone=number;
        this.location=loc;
    }
}

public class Montreal_server
{

    String record_id;
    ArrayList<StudentRecord> student_arraylist=new ArrayList<StudentRecord>();
    ArrayList<TeacherRecord>teacher_arraylist=new ArrayList<TeacherRecord>();

    HashMap<String,ArrayList> map=new HashMap<String,ArrayList>();

    void createTRecord(String f_name,String l_name,String addr,String number,String spec,String loc)
    {
        TeacherRecord t=new TeacherRecord(f_name,l_name,addr,number,spec,loc);
        teacher_arraylist.add(t);
        map.put("x",teacher_arraylist);


    }

    void createSRecord(String f_name,String l_name,String [] courses,String status,Date dat)
    {
        StudentRecord s=new StudentRecord(f_name,l_name,courses,status,dat);
        student_arraylist.add(s);
        map.put("s",student_arraylist);




    }

    void display()
    {
        System.out.println("inside display");
        for(Entry<String, ArrayList> en : map.entrySet())
        {
            java.util.Iterator<StudentRecord> itr = ((List<StudentRecord>)student_arraylist).iterator();



            while(itr.hasNext())
            {
                Object c=(Object)itr.next();

                System.out.println(c.first_Name+" "+c.last_Name+" "+c.status+" "+c.date+" "+c.courses_Registered);
            }
        }

    }

}

一個簡單的解決方案是在每個類上重寫toString()

public class StudentRecord {
    // fields, constructor etc.

    @Override
    public String toString() {
        return first_Name+" "+last_Name+" "+status+" "+date+" "+Arrays.toString(courses_Registered);  
    }
}

TeacherRecord創建類似的方法。 現在,在循環中,只需調用System.out.println(c); ,這將隱式打印toString()實現的結果。

此外,很多困惑是由於試圖將包含無關類型的列表強制轉換為單個映射而導致的。 最簡單的解決方案是僅單獨打印每個列表:

void display() {
    student_arraylist.forEach(System.out::println);
    teacher_arraylist.forEach(System.out::println);
}

讓兩個類都實現一個公共接口,例如

public interface PersonRecord {
String firstName();
String lastName();
...
}

public class StudentRecord implements PersonRecord
    { ... }

這使得

List<PersonRecord> students = new List<>();
students.add(new StudentRecord());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM