3

だから私はコンパレータの問題に取り組んでいてArray.sort、このファーストクラスのがなぜ私に次のエラーを与えているのか理解できません:

配列型のメソッド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;
    }
}
4

5 に答える 5

22

AnArrayListはJava配列とは異なります。リストを使用しているので、Arrays.sortここでは役に立ちません。

Collections.sort代わりに検討してください。

于 2012-10-15T04:31:53.177 に答える
3

Arrays.sortとCollections.sortの実際の問題(美しく答えられています)を無視するとComparator<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());

sort()Arraysクラスのを呼び出しており、はではなくファミリArrayListArrayList属しています。CollectionArray

Collectinss.sort()を使用すると、エラーは解決されます

于 2012-10-15T04:42:23.047 に答える