我需要一些有关如何对对象的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;
    }
}

10-06 14:50
查看更多