[英]Can't use custom Comparator in Java
我在為類實現自定義比較器時遇到問題:
public class MyProject {
private static class SuperClass {
public SuperClass (ArrayList<Car> cars) {
Collections.sort(cars);
Collections.sort(cars, new Car.CustomOrder());
}
}
public final static class Car implements Comparable<Car> {
public Comparator<Car> customOrder() {
return new CustomOrder();
}
public class CustomOrder implements Comparator<Car> {
public int compare(Car c1, Car c2) {
// some code
return 1;
}
}
}
我想按自定義比較器CustomOrder
對汽車進行排序。 我找不到我的錯誤,請幫助我。
您必須在Car
類中實現public int compareTo(Car o)
才能編譯程序。
Collections.sort(cars, new Car().new CustomOrder());
,因為CustomOrder
是一個內部類,而不是靜態的嵌套類。 它可以通過對外部類的現有引用來創建。
內部類的實例只能存在於外部類的實例中,並且可以直接訪問其封閉實例的方法和字段。
看來您不完全了解內部和嵌套類。 我建議在Oracle教程中閱讀有關它們的內容。
如Andrew Tobilko所建議,您必須在Car類中實現compareTo方法,因為您想比較Car對象。
看一下鏈接Java Object Sorting
也請寫干凈的代碼。 即使代碼很短,也很難閱讀。
嘗試擺脫static關鍵字,這不是一個好方法,並且很容易以不良的設計模式出現。
您擁有Car類,並在某處列出了這些類,因此無論car實現與否,都可以使用匿名類,並使用排序條件所需的字段...
按OrderId對列表進行排序(只是一個字符串)
public static void main(String[] args) {
List<Car> myCars = new ArrayList<>();
myCars.add(new Car(0, "qqweqw", "qwe"));
myCars.add(new Car(1, "Aqqweqw", "qwe"));
myCars.add(new Car(2, "Zqqweqw", "qwe"));
System.out.println("unsorted list" + myCars);
Collections.sort(myCars, new Comparator<Car>() {
@Override
public int compare(Car o1, Car o2) {
return o1.getOrder().compareTo(o2.getOrder());
}
});
System.out.println("sorted list" + myCars);
}
然后您可以看到,無需聲明將依賴項綁定到Car類的新比較器類
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.