3 回答
TA贡献1830条经验 获得超9个赞
使用方法定义一个接口Identifiable
(或超类 Person)int getId()
。
使您的所有类都实现该接口(或扩展该超类)。
停止使用原始类型,因此使用 aList<Identifiable>
而不是 a List
。
然后使用 a 对列表进行排序Comparator<Identifiable>
,可以使用Comparator.comparingInt(Identifiable::getId)
.
你所有的类都不应该实现 Comparable。它们的 ID 没有定义它们的自然顺序。在这个特定的用例中,您只是碰巧按 ID 对它们进行排序。因此应该使用特定的比较器。
TA贡献1840条经验 获得超5个赞
例如Person,定义一个超类,然后在id那里添加您的。基于 id 逻辑的比较也应该在那里实现。
public class Person implements Comparable<Person> {
private int id;
// getters, setters, compareTo, etc
}
让你所有的基类都从 Person
public class Student extends Person { ... }
public class Customer extends Person { ... }
public class Employee extends Person { ... }
public class Patient extends Person { ... }
List用术语定义您Person并对其应用排序。
public static void main(String[] args)
{
List<Person> list = new ArrayList<>();
list.add(new Employee(50));
list.add(new Customer(10));
list.add(new Patient(60));
list.add(new Student(90));
list.add(new Employee(20));
list.add(new Customer(40));
list.add(new Patient(70));
list.add(new Student(30));
Collections.sort(list);
System.out.println(list);
}
添加回答
举报