作为类结构的Java排序ArrayList

作为类结构的Java排序ArrayList,java,Java,在这个函数中,我的排序不能正常工作。我的lastID是string private void addDataToList(String LastID, String SmsBody) { List<ReceivedItemStructure> receivedItemStructures = new ArrayList<ReceivedItemStructure>(); ReceivedItemStructure rS = new Recei

在这个函数中,我的排序不能正常工作。我的lastID是string

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();
}
更新后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
返回字符串值并
返回rs1.getmLastID().compareTo(rs2.getmLastID())不工作。我的代码有什么问题以及如何解决这个问题?

来自方法的文档(重点是我的):

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

您的
比较
职能部门是否正确遵守合同


除非ID可以超过18位,否则我建议您将ID存储为
long
type。实现
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();
    }
}

使用
返回rs1.getmLastID().compareTo(rs2.getmLastID())35
345
时,code>直接将无法正常工作,因为字符串按字典顺序进行比较,当数字的位数不相同时,它与自然数的顺序不对应。

什么是
getmLastID()
return?@Mureinik我在主题中说这是一个字符串和返回字符串,那么为什么
return rs1.getmLastID().compareTo(rs2.getmLastID())
不起作用呢?请共享输入、您得到的输出以及您认为结果错误的原因。使用
if
方法返回1或0的可能重复项。这不对吗?@andbee:读粗体字。根据您的预期结果,您的代码强加的顺序正确吗?@andbee:我们不知道您的
ID
格式是什么。我们不知道您是希望通过字符串比较还是数字比较进行排序。因此,我能告诉你的最好的情况是:检查你的需求,编写你的函数,使它遵循
Comparator.compare
post updated的约定。我是LastID的logCat粘贴结果
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();
    }
}