[英]Ordering by date. Comparator. Java
從這個 java教程中獲取的下一個片段,將第二個參數對象與第一個參數對象進行比較而不是反之。 *方法hireDate()返回一個Date對象,表示該特定員工的雇用日期。
import java.util.*;
public class EmpSort {
static final Comparator<Employee> SENIORITY_ORDER =
new Comparator<Employee>() {
public int compare(Employee e1, Employee e2) {
return e2.hireDate().compareTo(e1.hireDate());
}
};
這是java教程的解釋:
請注意,比較者將其第二個參數的雇用日期傳遞給第一個參數,而不是反之亦然。 原因是最近雇用的員工是最不高級的; 按雇用日期順序排序會使列表按反向資歷順序排列。
不過我不知道為什么在E1和E2反轉compareTo
應該解決的問題。
還有進一步澄清嗎?
提前致謝。
如果要更改排序順序,請使用:
Collections.sort(list, Collections.reverseOrder(comparator));
不要與比較器一起玩。
日期的自然順序(由compareTo
定義)是較晚的日期“大於”早期的日期。 對於資歷來說,在那里待的人越長越高級,即你希望較早的開始日期表示比后者更高的資歷。
由於Comparator
的合同規定如果compare(a,b) != 0
然后compare(a,b)
和compare(b,a)
必須有相反的符號,你有兩個選擇來實現一個反向有序的比較a
和b
- 返回-(a.compareTo(b))
或b.compareTo(a)
- 保證它們具有相同的符號。
它們不一定有相同的價值 ,但對於比較結果唯一重要的是他們是否>
, <
或==
0 -而許多示例使用-1
, 0
和+1
用正確的符號中的任何值是好的。
如果e1<e2
, e1==e2
或e1>e2
,比較器的compare
方法期望返回-1,0或1。 因此,如果您得到的最終訂單只是所需的倒數,只需反轉a和b即可解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.