2

我正在尝试使用 Collections.sort() 对 java 中的对象列表进行排序。但我不断收到此错误:类型参数不在其范围内”。有谁知道我该如何解决这个问题?

我的代码

   public List<String> fetchNumbersForLeastContacted()
   {


    List<String> phonenumberList = getUniquePhonenumbers();
    List<TopTen> SortList = new ArrayList<TopTen>();


    Date now = new Date();
    Long milliSeconds = now.getTime();

    //Find phone numbers for least contacted
    for (String phonenumber : phonenumberList)
    {



       int outgoingSMS = fetchSMSLogsForPersonToDate(phonenumber, milliSeconds).getOutgoing();
       int outgoingCall = fetchCallLogsForPersonToDate(phonenumber, milliSeconds).getOutgoing();

       //Calculating the total communication for each phone number
       int totalCommunication = outgoingCall + outgoingSMS;

       android.util.Log.i("Datamodel", Integer.toString(totalCommunication));

       SortList.add(new TopTen(phonenumber, totalCommunication, 0));

    }

    //This is where I get the error
   Collections.sort(SortList);

TopTen.class

public class TopTen {

private String phonenumber;
private int outgoing;
private int incoming;


public TopTen (String phonenumber, int outgoing, int incoming)
{
    this.phonenumber = phonenumber;
    this.incoming = incoming;
    this.outgoing = outgoing;


}

public String getPhonenumber() {
    return phonenumber;
}

public void setPhonenumber(String phonenumber) {
    this.phonenumber = phonenumber;
}

public int getOutgoing() {
    return outgoing;
}

public void setOutgoing(int outgoing) {
    this.outgoing = outgoing;
}

public int getIncoming() {
    return incoming;
}

public void setIncoming(int incoming) {
    this.incoming = incoming;
}}
4

2 回答 2

2
public static void sort (List<T> list)

T只有在实现Comparable接口时才能使用此方法。这implements Comparable意味着存在一个T可以比较和排序两个类型对象的标准。在您的情况下,TisTopTen没有实现Comparable.

你需要做什么:

public class TopTen  implements Comparator<TopTen> {

    ....
    ....

    @Override
    public int compareTo(TopTen other) {

        if (this == other) return EQUAL;

        return this.getPhonenumber().compareToIgnoreCase(other.getPhonenumber());

    }

这将根据该phonenumber字段比较两个 TopTen 对象。如果您希望根据其他条件对对象进行排序,请使用该条件返回 -1(之前)、0(等于)或 1(之后)。

例如,要基于 排序incoming,请使用以下命令:

@Override
public int compareTo(TopTen other) {

    final int BEFORE = -1;
    final int EQUAL = 0;
    final int AFTER = 1;

    if (this == other) return 0;

    if (this.getIncoming() > other.getIncoming()) {
        return AFTER;
    } else if (this.getIncoming() < other.getIncoming()) {
        return BEFORE;
    } else {
        return EQUAL;
    }

}

这将使您获得按升序incoming字段值排序的 TopTen 对象。

于 2013-09-28T06:03:47.843 回答
0

尝试Comparable在 TopTen 类中实现接口并覆盖compareTo方法以指定您的排序逻辑

@Override
public int compareTo(TopTen o) {
    // TODO Auto-generated method stub
    return 0;
}

(或者)

Collections.sort(SortList, new Comparator<TopTen>(){
            public int compare(TopTen t1, TopTen t2) {
                return t1.phonenumber.compareTo(t2.phonenumber);
            }
        });
于 2013-09-28T05:53:39.863 回答