簡體   English   中英

按日期排序。 比較。 Java的

[英]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)必須有相反的符號,你有兩個選擇來實現一個反向有序的比較ab - 返回-(a.compareTo(b))b.compareTo(a) - 保證它們具有相同的符號。

它們不一定有相同的價值 ,但對於比較結果唯一重要的是他們是否><== 0 -而許多示例使用-10+1用正確的符號中的任何值是好的。

如果e1<e2e1==e2e1>e2 ,比較器的compare方法期望返回-1,0或1。 因此,如果您得到的最終訂單只是所需的倒數,只需反轉a和b即可解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM