Java将ArrayList排序为类结构

时间:2014-10-11 14:14:23

标签: java

在这个函数中,我的排序无法正常工作。我的lastID是字符串

private void addDataToList(String LastID, String SmsBody) {
    List<ReceivedItemStructure> receivedItemStructures = 
      new ArrayList<ReceivedItemStructure>();
    ReceivedItemStructure rS = new ReceivedItemStructure();

    rS.setmLastID(LastID);
    rS.setmSmsBody(SmsBody);
    items.add(rS);

    Collections.sort(receivedItemStructures, new Comparator<ReceivedItemStructure>() {
        @Override
        public int compare(ReceivedItemStructure  rs1, ReceivedItemStructure  rs2)
        {
            if( rs1.getmLastID().equals(rs2.getmLastID()) )
                return 1;
            return 0;
        }
    });
    adapter.setRow(items);
    adapter.notifyDataSetChanged();
}

ReceivedItemStructure类:

public class ReceivedItemStructure {
    public String mLastID;
    public String mSmsBody;

    public ReceivedItemStructure(String vLastID, String vSmsBody) {
        mLastID  = vLastID;
        mSmsBody = vSmsBody;
    }

    public ReceivedItemStructure() {}

    public String getmLastID() {
        return mLastID;
    }

    public void setmLastID(String LastID) {
        mLastID = LastID;
    }

POST UPDATE catLog结果:

10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30390335
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30390100
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30389996
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30374135
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30374099
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30374093
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30374084
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30374062
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30373780
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30373756
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30390748
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30390755
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30391045
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30391076
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30391095
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30395978
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30395972
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30395990
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30396009
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30396045
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30396250
10-11 14:27:51.860    4658-4658/ir.tsms E/LastID:﹕ 30396259

getmLastID返回字符串值,return rs1.getmLastID().compareTo(rs2.getmLastID());无效。我的代码问题是什么以及如何解决?

1 个答案:

答案 0 :(得分:2)

Comparator.compare()方法的文档(强调我的):

  

比较其订单的两个参数。 返回负整数,零或正整数,因为第一个参数[分别]小于,等于或大于第二个参数。

您的compare功能是否正确遵循合同?


除非ID可以超过18位,否则我建议您将ID存储为long类型。实现compare函数将非常简单:

public int compare(ReceivedItemStructure  rs1, ReceivedItemStructure  rs2)
{
    return rs1.getmLastID() - rs2.getmLastID();
}

如果您仍想将ID存储为字符串类型:

public int compare(ReceivedItemStructure  rs1, ReceivedItemStructure  rs2)
{
    if (rs1.getmLastID().length() == rs2.getmLastID().length()) {
        return rs1.getmLastID().compareTo(rs2.getmLastID());
    } else {
        return rs1.getmLastID().length() - rs2.getmLastID().length();
    }
}

比较return rs1.getmLastID().compareTo(rs2.getmLastID());35时,直接使用345将无法正常工作,因为字符串按字典顺序进行比较,并且当数字为&时,它与自然数的排序不对应#39; t具有相同的位数。