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