1

大文字と小文字を区別せずに、映画の配列をアルファベット順に並べようとしています。私のアプリケーションでは、ユーザーは自分のエントリを ListView 内の既に初期化されているムービーの配列に追加できます。スニペットは次のとおりです。

            Lab7_082588FetchDetails newMovie = new Lab7_082588FetchDetails();
            IgnoreCaseComparator ignoreCase = new IgnoreCaseComparator();
            newMovie.setTitle(data.getStringExtra(Lab7_082588Edit.TITLE_STRING));
            newMovie.setGross(data.getStringExtra(Lab7_082588Edit.GROSS_STRING));
            newMovie.setDate(data.getStringExtra(Lab7_082588Edit.DATE_STRING));
            results.add(newMovie);
            adapter.notifyDataSetChanged();
            Collections.sort(results, ignoreCase);

ただし、最後の行の .sort 部分でエラー メッセージが表示されます。

The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (ArrayList<Lab7_082588FetchDetails>, IgnoreCaseComparator)

また、これは私の IgnoreCaseComparator です:

import java.util.Comparator;

class IgnoreCaseComparator implements Comparator<String> {
    public int compare(String strA, String strB) {
        return strA.compareToIgnoreCase(strB);
    }  
}

そして、私の Fetch Details クラス:

public class Lab7_082588FetchDetails implements Comparable<Lab7_082588FetchDetails> {

private String title;
private String gross;
private String date;

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getGross() {
    return gross;
}

public void setGross(String gross) {
    this.gross = gross;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

@Override
public int compareTo(Lab7_082588FetchDetails another) {
    // TODO Auto-generated method stub
    return title.compareTo(another.title);
}

}

これを解決するにはどうすればよいですか?

4

2 に答える 2

2

コンパレータまたは同等のいずれかを使用する

Comparable : クラス構造を変更して compareTo メソッドを追加できる場合

コンパレーター: クラス構造を変更できない場合。

また、比較する必要があるオブジェクトとともに両方を渡す必要があります。あなたの場合、コンパレーターが書かれていてString、あなたは合格していますLab7_082588FetchDetails

于 2012-08-17T06:37:12.937 に答える
2
implements Comparator<String>

コンパレータは文字列のみを受け入れますが、リストにはLab7_082588FetchDetailsオブジェクトがあります。

道具に変えるComparator<Lab7_082588FetchDetails>

比較方法を次のように変更します

public int compare(Lab7_082588FetchDetails objA, Lab7_082588FetchDetails objB) {
        return objA.getTitle().compareToIgnoreCase(objB.getTitle());
    }  
于 2012-08-17T06:32:31.927 に答える