【问题标题】:List with two different object need to sort具有两个不同对象的列表需要排序
【发布时间】:2016-05-22 00:32:16
【问题描述】:

ArrayList 有两个不同的类/objects

   - 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());

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

【问题讨论】:

  • 欢迎来到 StackOverflow!请注意,StackOverflow 不是“编写我的代码”服务。如果您需要帮助,请发布您编写的代码,以便我们为您提供适当的帮助。
  • 请添加一些代码来显示您到目前为止所做的工作。
  • 建议我如何在 java 中实现相同
  • 你熟悉 oop 概念吗??
  • 我知道哎呀概念我面临这个问题,所以需要澄清。如果理解,请在此处解释其他工作 - @JanithaMadushan

标签: java arraylist collections


【解决方案1】:

创建一个带有名称和 ID 字段的 Person 类。

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

然后你可以创建一个ArrayList&lt;Person&gt;,它可以包含两个元素,你可以使用Comparator&lt;Person&gt;对其进行排序。

修改你的代码:

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() );
}

【讨论】:

  • 感谢您的示例。我的要求是 class emp { String name;内部标识; getter setter } 和 class student{ String name, int id getter and setter }。数组列表有这两个大小为 100 的类。需要根据 id 字段进行排序。
  • EmpStudent 类都有所有这些字段和方法 - 它们从 Person 继承。 ArrayList 可以包含任意数量的人,如果您运行它,您会看到它确实按 ID 对它们进行排序 - 使用 Person 类的 Comparable 接口进行排序。
猜你喜欢
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多