簡體   English   中英

創建顛倒順序的比較器的最佳方法

[英]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.

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