在这个函数中,我的排序无法正常工作。我的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());
无效。我的代码问题是什么以及如何解决?
答案 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具有相同的位数。