我需要一些帮助如何排序对象的ArrayList.我有超类帐户和两个子类SavingsAccount和CreditAccount.在Account类中,当我想知道帐号时,我有这个方法来调用:
// Get account number
public String getAccountNumber() {
return accountNumber;
}
Run Code Online (Sandbox Code Playgroud)
我需要对帐号进行排序,以获得对象中所有帐户的最大数量?
ArrayList是这样的:
ArrayList<Account> accountList = new ArrayList<Account>();
Run Code Online (Sandbox Code Playgroud)
这可以用一种简单而不复杂的方式来完成吗?谢谢!
一开始,为什么一个帐户数被表示为一个字符串?它是一个数字,还是文本?无论如何,绝对可以使用Collections.sort以下方式对列表进行排序:
Collections.sort(list, new Comparator<Account>() {
@Override public int compare(Account x, Account y) {
return x.getAccountNumber().compareTo(y.getAccountNumber();
}
});
Run Code Online (Sandbox Code Playgroud)
如果它为你排序错误(升序而不是降序),则反转比较:
Collections.sort(list, new Comparator<Account>() {
@Override public int compare(Account x, Account y) {
return y.getAccountNumber().compareTo(x.getAccountNumber();
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,由于这些是字符串,因此将按字典顺序对它们进行排序.如果您使用的是数字,那就不会有问题了.
在这种情况下我不推荐的替代方案是制作Account工具Comparable<Account>.当有一种比较两个账户的"自然"方式时,这是合适的 - 但我可以看到你有时可能希望按号码排序,有时候是通过账户持有人的名字排序,有时候是通过账户中的资金,有时是按日期排序帐户已创建等
顺便说一句,目前尚不清楚你真的需要对它进行排序 - 如果你只需要找到最大的帐号,你不需要对它进行排序,你只需要迭代并记住编号最大的帐号当你去时:
Account maxAccount = null;
for (Account account : accounts) {
if (maxAccount == null ||
account.getAccountNumber().compareTo(maxAccount.getAccountNumber()) > 0) {
maxAccount = account;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2019 次 |
| 最近记录: |