对对象的ArrayList进行排序?

3D-*_*tiv 0 java

我需要一些帮助如何排序对象的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)

这可以用一种简单而不复杂的方式来完成吗?谢谢!

Jon*_*eet 5

一开始,为什么一个帐户被表示为一个字符串?它是一个数字,还是文本?无论如何,绝对可以使用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)