我需要一些有关如何对对象的ArrayList进行排序的帮助。我有超类帐户和两个子类SavingsAccount和CreditAccount。在Account类中,当我想知道帐号时,可以使用以下方法来调用:
// Get account number
public String getAccountNumber() {
return accountNumber;
}
我需要对帐号进行排序,以获取对象中所有帐号的最大数量?
ArrayList是这样的:
ArrayList<Account> accountList = new ArrayList<Account>();
能否以简单而不复杂的方式完成此工作?谢谢!
最佳答案
首先,为什么将帐号表示为字符串?是数字还是文字?无论如何,绝对可以使用Collections.sort
对列表进行排序:
Collections.sort(list, new Comparator<Account>() {
@Override public int compare(Account x, Account y) {
return x.getAccountNumber().compareTo(y.getAccountNumber();
}
});
如果这样对您的排序是错误的(升序而不是降序),请反转比较:
Collections.sort(list, new Comparator<Account>() {
@Override public int compare(Account x, Account y) {
return y.getAccountNumber().compareTo(x.getAccountNumber();
}
});
请注意,由于这些是字符串,因此将按字典顺序对其进行排序。如果您使用数字代替,那将不是问题。
在这种情况下,我不建议使用的替代方法是使
Account
实现Comparable<Account>
。当有一种比较两个帐户的“自然”方法时,这很合适-但我可以看到您可能希望有时按数字排序,有时按帐户持有人的姓名,有时按帐户内的资金,有时按日期排序该帐户已创建,等等。顺便说一句,不清楚您是否真的需要对它进行排序-如果您只需要查找最大的帐号,就不需要对其进行排序,只需要迭代并记住具有最大号的帐户即可当你去时:
Account maxAccount = null;
for (Account account : accounts) {
if (maxAccount == null ||
account.getAccountNumber().compareTo(maxAccount.getAccountNumber()) > 0) {
maxAccount = account;
}
}