3

所以我正在研究一个比较器问题,但我不明白为什么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());
    }

卡路里比较器类:

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;
    }
}
4

5 回答 5

22

AnArrayList与 Java 数组不同;由于您使用的是列表,Arrays.sort因此不会在这里为您提供帮助。

Collections.sort改为考虑。

于 2012-10-15T04:31:53.177 回答
3

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

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;
    }
  }
}
于 2012-10-15T04:42:36.870 回答
2

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

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

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

于 2012-10-15T04:33:35.387 回答
0

由于错误消息表明问题实际上是由传递列表而不是预期数组的位置引起的,与比较器无关。

请尝试以下操作

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

但是这样你最终不会得到想要的结果,因为它会对刚刚创建的全新数组而不是列表本身进行排序。但是您应该了解错误消息试图表达的内容。只要确保不要在那里传递一个列表,它意味着对一个数组而不是一个列表进行排序。

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

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

于 2012-10-15T04:31:44.327 回答
0
Arrays.sort(elist, new CalorieComparator());

你叫a sort()of Arraysclass with ArrayListArrayList属于Collectionfamily not an Array

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

于 2012-10-15T04:42:23.047 回答