Mmt*_*Bkn 1 java sorting collections
我已经阅读了所有答案等,但他们没有解决我的问题.
我有基本功能来按字符串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);
}
});
Run Code Online (Sandbox Code Playgroud)
Invoice类的某些部分.
public class Invoice extends AttributeContainer
implements KvmSerializable,android.os.Parcelable, Comparable
{
public String CustomerId;
public String InvoiceNumber;
Run Code Online (Sandbox Code Playgroud)
但是,它从不调用比较方法.
我正在使用android studio和最新的库.有什么我想念的吗?
但是,它从不调用比较方法.
唯一一次compare(...)不调用该方法的方法是,如果您的列表中包含0或1个项目.可能这是Android的调试问题,并且compare(...) 正在被调用,但可能正在跳过断点.在方法中放入某种日志消息将证实这一点.
我怀疑你的问题在这里:
public String InvoiceNumber;
Run Code Online (Sandbox Code Playgroud)
首先,字段名称应该是invoiceNumber一个起始小写字母.此外,它大概应该不会是公开的数据隐藏的原因.
但我怀疑真正的问题在于String数字的比较.例如,如果您的实体中包含以下发票编号字符串:
1
2
3
10
11
20
25
114
201
Run Code Online (Sandbox Code Playgroud)
然后这些将类似于:
1
10
11
114
2
20
25
201
3
Run Code Online (Sandbox Code Playgroud)
这就是该String.compare(...)方法对它进行排序的原因,因为字符串"3"大于字符串"201".如果您希望将它们按数字排序,那么您应该将该invoiceNumber字段设为int或long.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |