Android:Collection.sort()使用Comparator不匹配

时间:2012-08-17 06:30:05

标签: java android sorting arraylist

我正在尝试按字母顺序排列一系列电影,忽略大小写。我的应用程序允许用户将他/她自己的条目添加到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);
    }  
}

我的获取详细信息类:

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

}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

implements Comparator<String>

您的比较器仅接受String,但您的列表中有Lab7_082588FetchDetails个对象。

将其更改为实施Comparator<Lab7_082588FetchDetails>

并将比较方法更改为

public int compare(Lab7_082588FetchDetails objA, Lab7_082588FetchDetails objB) {
        return objA.getTitle().compareToIgnoreCase(objB.getTitle());
    }  

答案 1 :(得分:2)

使用比较器或类似的

可比较:何时可以更改类结构以添加compareTo方法

比较器:如果你不能改变类结构。

两者都应该与需要比较的对象一起传递。 在您的情况下,比较器是为String编写的,您正在传递Lab7_082588FetchDetails