![](/img/trans.png)
[英]Proof of concept: how I can create a generic comparator method with reflection?
[英]how to make a generic comparator method
我有一個實用程序類,我想有一個通用的排序方法,以便將傳遞給下面發布的此靜態方法的任何類型的arrayList進行排序。
當我編寫下面的代碼時,eclipse要求添加未實現的方法,當我接受添加它們時,我發現它們太多了,我不知道應該使用哪個方法
代碼 :
public static <T> void sortAsc(ArrayList<T> list) {
Collections.sort(list, ascOrder);
}
private static Comparator<T> ascOrder = new Comparator<T>() {
public int compare(DMatch arg0, DMatch arg1) {
// TODO Auto-generated method stub
return Float.compare(arg0.distance, arg1.distance);
}
};
要執行您想做的事情,您需要一個類型,以確保將有一個getDistance()
方法。 那可以是抽象類或接口。 無論是哪個,我都將其稱為HasDistance。
public static void sortAsc(ArrayList<? extends HasDistance> list) {
Collections.sort(list, ascOrder);
}
private static Comparator<HasDistance> ascOrder = new Comparator<>() {
public int compare(HasDistance arg0, HasDistance arg1) {
return Float.compare(arg0.getDistance(), arg1.getDistance());
}
};
如果要對“任何類型”進行排序,則需要選擇對“任何類型”都適用的內容。 本質上,您想對Object
列表進行排序。 那可能會限制您比較myObject.hashCode()
或myObject.toString()
。 選擇一個或另一個並堅持下去。 從這兩種方法中的任何一種獲得的訂購是否有用將是一個完全不同的問題。
如果您可以使列表的內容不那么籠統,那么您將有更多的選擇范圍。
在Java 8之后,您可以只使用yourList.sort(param)。 如果列表中的項目實現Comparable接口,則方法param可以為Comparator或null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.