【发布时间】:2011-04-08 08:05:18
【问题描述】:
我有一个有两个日期字段的类说:
class TestData {
Date activation;
Date timeStamp;
}
我想根据activation 日期对上述类的列表进行排序,如果它们相等,则根据timestamp 即 max(activation) 和 max(timeStamp)。
我尝试的代码如下,它只获取 max(activation)
public class CollectionSort {
public static void main(String[] args) {
List<TestData> testList = new ArrayList<TestData>();
Collections.sort(testList, new Comparator<TestData>() {
@Override
public int compare(TestData t1, TestData t2) {
int result = 0;
if (t1.getActivation().before(t2.getActivation())) {
result = 1;
}
return result;
}
});
System.out.println("First object is " + testList.get(0));
}
}
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
请注意,如果您的
Comparator实现永远不能返回负整数(通常是-1),那么它几乎肯定是错误的!因为如果compare(a, b)返回一个正数int,那么compare(b, a)必须返回一个负数! -
您不需要在比较方法中强制转换为 TestData 或 instanceof 测试。由于泛型 (Java 5) 转换是在幕后自动为您完成的,因此方法参数已经是 TestData 类型。
标签: java sorting collections