在Java 8中,Comparator
接口有一個方法thenComparing
。您可以使用此方法創建一個比較器,該比較器可通過多個字段進行比較。
如果你有一個比較,按字母順序和其他按日期來比較比較,你可以結合比較由字段進行排序,你想:
Comparator<Project> nameComparator = ...
Comparator<Project> dateComparator = ...
您可以使用反向比較,如果混合比較,需要。以下是一些示例:
Comparator<Project> nameAndDateComparator = nameComparator.thenComparing(dateComparator);
Comparator<Project> nameAndReversedDateComparator = nameComparator.thenComparing(dateComparator.reversed());
然後,您可以按照通常的方式使用匹配您需要的比較器進行排序。
如果你沒有使用Java 8中,您可以創建一個實用工具類,您比較相結合:
public class CombinedComparator<T> implements Comparator<T> {
Comparator<T> firstComparator;
Comparator<T> secondComparator;
public CombinedComparator(Comparator<T> firstComparator, Comparator<T> secondComparator) {
this.firstComparator = firstComparator;
this.secondComparator = secondComparator;
}
@Override
public int compare(T o1, T o2) {
int result = firstComparator.compare(o1, o2);
return (result != 0) ? result : secondComparator.compare(o1, o2);
}
}
而且你可以創建多個字段比較器是這樣的:
Comparator<Project> nameAndDateComparator = new CombinedComparator<Project>(nameComparator, dateComparator);
Comparator<Project> nameAndReversedDateComparator = new CombinedComparator<Project>(nameComparator, Collections.reverseOrder(dateComparator));
所以,你需要根據日期按降序排序,如果日期相同,您需要在該子集上完成名稱排序? – aksappy
我覺得很好。讓我們看看其他人的建議。 Apache Commons CompareToBuilder也可以工作。我曾經用過那個。 – Kartic