【问题标题】:How to sort array of objects based on object value? [duplicate]如何根据对象值对对象数组进行排序? [复制]
【发布时间】:2021-12-09 22:32:30
【问题描述】:

我想根据 seats 对 Vehicles 数组进行排序。我尝试在这里寻找解决方案,但是每当我将Vehicle 对象传递给compareTo 方法时,我的所有其他文件中都会出现错误,例如The type Bike must implement the inherited abstract method Comparable.compareTo(Object)。有人可以帮我处理这段代码吗?

public abstract class Vehicle implements Comparable {
    
    protected int seats;
    protected int wheels;
    protected int price;
    protected int weight;
    
     public int compareTo(Vehicle o) {
        return -1;
    }

 public static void main(String [] args) {
        Car Lamborghini = new Car(5,4,30000, 1500);
        Bike BMX = new Bike(1,2,300, 15);
        Vehicle Vehicles[] = new Vehicle[2];

        Vehicles[0] = Lamborgini;
        Vehicles[1] = Bmx;

        Arrays.sort(Vehicles);
        for(int i=0;i<Vehicles.length;i++) {
            System.out.println(Vehicles[i]);
        }
    }

【问题讨论】:

  • The type Bike must implement the inherited abstract method Comparable.compareTo(Object) compareTo from Bike 的实现在哪里?

标签: java


【解决方案1】:

这样试试吧。

将比较器方法更改为

public int compareTo(Vehicle o) {
       return this.seats < o.seats ? -1 : this.seats > o.seats ? 1 : 0;
}

现在您可以将Vehicle 数组传递给Arrays.sort();

我也必须道歉。我太习惯使用原始数组了,我忘记了在使用对象数组时可以将比较器传递给Arrays.sort。因此,您还可以执行以下操作:

Arrays.sort(Vehicles, Comparator.comparing(Vehicle::getSeats)).

或通过比较器传递任何其他标准。如果你想反转你可以做的排序。

Arrays.sort(Vehicles, Comparator.comparing(Vehicle::getSeats, Comparator.reverseOrder());

要在当前实现中颠倒顺序,只需更改不等号即可。

【讨论】:

  • 不幸的是,我不得不使用 Arrays.sort。
  • 查看我更新的答案。
【解决方案2】:

写这个

public abstract class Vehicle implements Comparable<Vehicle>

而不是

public abstract class Vehicle implements Comparable

或改变

public int compareTo(Vehicle o) {

public int compareTo(Object o) {

还要通过一些泛型来更好地理解。

【讨论】:

  • "或将public int compareTo(Vehicle o) { 更改为public int compareTo(Vehicle o) {" - 我怀疑您想将第二种方法中的参数更改为Object?如果是这样:我强烈建议不要使用这种方法,并且只推荐正确输入Comparable-interface 的第一个解决方案。
  • 不能同意更多
猜你喜欢
  • 2013-11-25
  • 1970-01-01
  • 2014-05-29
  • 2013-02-24
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多