比较器不适用于Arrays.sort

时间:2012-10-15 04:29:05

标签: java arrays sorting comparator

所以我正在研究一个比较器问题,我无法弄清楚为什么第一堂课中的Array.sort给我的错误是:

  

Arrays类型中的方法sort(T [],Comparator)不适用于参数(ArrayList,CalorieComparator)

餐厅类:

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

public class Restaurant {
    private ArrayList<Edible> elist;

    public Restaurant() {
    }

    public void addEdibleItem(Edible item){
        elist.add(item);
    }

    public List<Edible> orderByCalories(){
        Arrays.sort(elist, new CalorieComparator());
    }

CalorieComparator类:

import java.util.Comparator;
public class CalorieComparator implements Comparator {

    public int compare(Object o1, Object o2){
        Edible thisfood = (Edible)o1;
        Edible otherfood = (Edible)o2;
        if(thisfood.getCalories() > otherfood.getCalories())
            return 1;
        else if (thisfood.getCalories() < otherfood.getCalories())
            return -1;
        else 
            return 0;
    }
}

5 个答案:

答案 0 :(得分:22)

ArrayList与Java数组不同;由于您使用的是列表,因此Arrays.sort无法帮助您。

请考虑Collections.sort

答案 1 :(得分:3)

忽略Arrays.sort与Collections.sort的实际问题(已得到很好的解答),在比较方法中实现Comparator<Edible>而不是强制转换对象可能是个好主意:

public class CalorieComparator implements Comparator<Edible> {

  @Override
  public int compare(Edible o1, Edible o2) {        
    if (o1.getCalories() > o2.getCalories()) {
        return 1;
    } else if (o1.getCalories() < o2.getCalories()) {
        return -1;
    } else {
        return 0;
    }
  }
}

答案 2 :(得分:2)

Arrays.sort将数组作为其第一个参数。要对列表等集合进行排序,请使用Collections.sort

Collection.sort(elist, new CalorieComparator());

另请注意,您的方法无法编译,因为您没有返回List<Edible>

答案 3 :(得分:0)

正如错误消息所示,问题实际上是由传递列表引起的,而不是数组所在的,与比较器无关。

请尝试以下

Arrays.sort(elist.toArray(), new CalorieComparator());

但有了这个,你最终无法获得理想的结果,因为它会对刚刚创建的全新数组进行排序而不是列表本身。但是你应该知道错误信息试图说的是什么。只要确保不要在那里传递一个列表,它就是要对数组进行排序而不是列表。

正如其他人所建议的那样,请使用Collections.sort方法来获得所需的结果。

另外,只是附注,您应该扩展通用版本Comparator<T>而不是非通用版本。

答案 4 :(得分:0)

Arrays.sort(elist, new CalorieComparator());

您正在使用sort()来调用Arrays ArrayList个班级,ArrayList属于Collection个家庭而不是Array

您的错误将得到解决 如果您使用Collectinss.sort()