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