我已经阅读了所有答案等,但没有解决我的问题。
我有基本功能来按字符串InvoiceNumber对自定义对象数组列表进行排序。
List<Invoice> invoiceList = new ArrayList<>();
...
// invoiceList filled here
...
Collections.sort(invoiceList, new Comparator<Invoice>()
{
@Override
public int compare(Invoice o1, Invoice o2)
{
return o1.InvoiceNumber.compareTo(o2.InvoiceNumber);
}
});
Invoice类的某些部分。
public class Invoice extends AttributeContainer
implements KvmSerializable,android.os.Parcelable, Comparable
{
public String CustomerId;
public String InvoiceNumber;
但是,它从不调用比较方法。
我使用android studio和最新的库。我有什么遗失的吗?
答案 0 :(得分:6)
但是,它从不调用比较方法。
如果您的列表中包含0或1个项目,则唯一不会调用compare(...)
方法的时间。可能这是Android的调试问题,而compare(...)
正在调用,但可能正在跳过断点。在方法中放入某种日志消息将证实这一点。
我怀疑你的问题在这里:
public String InvoiceNumber;
首先,字段名称应为invoiceNumber
,并带有一个小写字母。 也可能因data hiding原因而公开。
但我怀疑真正的问题在于String
数字的比较。例如,如果您的实体中包含以下发票编号字符串:
1
2
3
10
11
20
25
114
201
然后这些就像:
1
10
11
114
2
20
25
201
3
String.compare(...)
方法如何对其进行排序,因为字符串"3"
大于字符串"201"
。如果您希望将它们按数字排序,则应将invoiceNumber
字段设为int
或long
。
希望这有帮助。
答案 1 :(得分:0)
为sort
方法创建匿名类时,我遇到了同样的问题。尝试提取您的Comparator
类,您将可以进行调试。