![](/img/trans.png)
[英]What's the best way to test a comparator that uses another comparator in Java?
[英]Best way of creating a Comparator that reverses order
這似乎是一個愚蠢的問題,但我想查詢以反向順序排序未實現Comparable
的類MyClass
的可排序結構(任何類型,可以是List
)的最佳方法
首先,由於MyClass
沒有實現Comparable
並且我想對其進行排序,因此我創建了Comparator
,如下所示:
public class MyClassComparator implements Comparator<MyClass> {
@Override
public int compare(MyClass o1, MyClass o2) {
return (o1.getMyField()).compareTo(o2.getMyField());
}
}
當然,這將根據MyClass.MyField的自然順序對MyClass對象進行排序。 但是我想要相反的順序。
我當然可以在compare(MyClass o1, MyClass o2)
方法中對相反的順序進行硬編碼。 就像是
if (o1.getMyField()).compareTo(o2.getMyField()) > 0 return -1;
if (o1.getMyField()).compareTo(o2.getMyField()) < 0 return 1;
return 0;
另一種選擇是保留我最初建議的MyClassComparator代碼,並使用java.util.Collections
public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)
傳遞MyClassComparator
實例並獲得反向比較器。
我認為是錯誤的第三個選擇是,可以使用自然順序Comparator對我的LinkedList<MyClass>
進行排序,然后從最后到第一個獲取元素。 LinkedList
是一個雙鏈表,因此它應該可以完美地處理它。 問題在於,我總是必須獲得一個特定的Iterator
而不是僅對for each
循環(次要)使用a,當然,我最初想對任何可排序的結構進行排序,但我不能保證它會是一個雙向鏈表或任何處理順序相反的鏈表。
考慮到我很確定(永遠不能100%肯定)我不會使用MyClass
對象的自然順序,而只是使用反向順序,那么獲取反向比較器的最佳方法是什么?
謝謝。
為了避免反轉陣列的開銷,在這里使用比較器將是正確的方法。 如果您要比較的類實現Comparable,則可以顛倒比較的順序。 obj2.compareTo(obj1)
。 可視化的一種方法是將兩個對象視為整數,並將compareTo減去它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.