2016-02-11 50 views
-6

ArrayList中具有两个不同的类/对象列表有两个不同的对象需要排序

- Student class has 2 fields --> NAME and ID 

    - Employee class has 2 fields --> NAME and ID 

需要基于ID字段进行排序。能否请你帮助我,谢谢。

我的建议是使用比较器可以帮助我的java代码。

class Emp { 
    String name; 
    int number; 
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 
    public int getNumber() { return number; } 
    public void setNumber(int number) { this.number = number; } 
} 

class Student { 
    String name; 
    int number; 
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 
    public int getNumber() { return number; } 
    public void setNumber(int number) { this.number = number; } 
} 

class empcomparator implements Comparator { 
    @Override 
    public int compare(Object o1, Object o2) { 
    String a = ((emp) o1).getName(); 
    String b = ((student) o2).getName(); 
    return a.compareTo(b); return 1; 
    } 
} 

主类,我的代码:

Emp emp = new Emp(); 
emp.setName("test1"); 
emp.setNumber(11); 
Student stud= new Student(); 
stud.setName("test2"); 
stud.setNumber(22); 
List<Object> studentlist = new ArrayList<Object>(); 
studentlist.add(emp); 
studentlist.add(stud); 
Collections.sort(studentlist, new empcomparator()); 

列表包含这样需要根据ID进行排序100对象。请给我一个好主意。

+3

欢迎的StackOverflow!请注意,StackOverflow不是“写我的代码”服务。如果您需要帮助,请张贴您写的代码,以便我们可以给予适当的帮助。 – UditS

+0

请添加一些代码以显示迄今为止所做的工作。 –

+0

建议我如何在java中实现相同 – Moto

回答

3

使用名称和ID字段创建Person类。

创建StudentEmployee类,以便它们继承Person类。

然后你可以制作一个ArrayList<Person>它可以包含这两个元素,你可以使用Comparator<Person>对它进行排序。

修改代码:

abstract class Person implements Comparable<Person> { 
    String name; 
    int number; 
    public Person(final int id, final String name){ 
     setNumber(id); 
     setName(name); 
    } 
    public String getName() { return name; } 
    public void setName(String name) { this.name = name; } 
    public int getNumber() { return number; } 
    public void setNumber(int number) { this.number = number; } 
    public int compareTo(final Person otherPerson){ 
     return Integer.compare(this.getNumber(), otherPerson.getNumber()); 
    } 
    public abstract String toString(); 
} 

class Emp extends Person { 
    public Emp(final int id, final String name){ 
     super(id, name); 
    } 
    public String toString(){ return String.format("Employee: %d, %s", getNumber(), getName()); } 
} 

class Student extends Person { 
    public Student(final int id, final String name){ 
     super(id, name); 
    } 
    public String toString(){ return String.format("Student: %d, %s", getNumber(), getName()); } 
} 

public static void main(final String[] args){ 
    ArrayList<Person> people = new ArrayList<Person>(); 
    people.add(new Student(23, "Bob")); 
    people.add(new Emp(12, "Alice")); 
    people.add(new Student(3, "Carol")); 
    people.add(new Emp(5, "Denise")); 
    System.out.println(people.toString()); 
    Collections.sort(people); 
    System.out.println(people.toString()); 
} 
+0

谢谢你的例子。我的要求是class emp {String name; int id; getter setter}和class student {String name,int id getter和setter}。数组列表有100个大小的这两个类。需要根据id字段进行排序。 – Moto

+0

'Emp'和'Student'类都有** all **这些字段和方法 - 它们从'Person'继承它们。 ArrayList可以包含尽可能多的人,如果你运行它,那么你会发现它确实通过ID对它们进行了排序 - 使用Person类的Comparable接口进行排序。 – MT0

相关问题