【发布时间】:2017-01-09 10:29:08
【问题描述】:
我有一个 Collection<BasePerson>,其中 BasePerson 是一个共享公共属性的 abstract 类。
abstract class BasePerson {
String name;
}
class Person extends BasePerson {
}
class Employee extends BasePerson {
int id;
}
如何按类型对集合进行排序?我想让 Any Person 按name 排序,并放在任何“非人”类之上。
Employee 对象本身应首先按id 排序,然后按name 排序
输入:
#name;id
xava (Person)
anna,31 (Employee)
tom,30 (Employee)
输出:
xava (persons before employees)
tom,30 (id should have a higher weight than name comparison)
anna,31
如何创建这样的Comparator<Person>?
new Comparator<BasePerson>() {
@Override
public int compare(BasePerson p1, BasePerson p2) {
if (p1 instanceof Person) {
if (p2 instanceof Person) {
return p1.getName().compareTo(p2.getName());
}
return 1;
} else if (p2 instanceof Person) {
return -1;
}
return 0;
}
}
【问题讨论】:
-
你有什么尝试吗?
-
展示你的尝试
-
您是否尝试过使用
instanceofoperator? (结合类型转换) -
"weka"或"tom"怎么可能是int name类型的属性? -
这是测试驱动开发 (tdd) 的一项好任务。用你能想到的所有可能的组合来编写你的测试。请记住 Comparator 的规则:docs.oracle.com/javase/7/docs/api/java/util/Comparator.html。然后开始实施 Comparator。