对对象的ArrayList排序?[英] Sort an ArrayList of objects?

问题描述

我需要一些帮助来对对象的 ArrayList 进行排序.我有超类 Account 和两个子类 SavingsAccount 和 CreditAccount.在 Account 类中,当我想知道帐号时,我可以调用此方法:

// Get account number
public String getAccountNumber() {
    return accountNumber;
}

我需要对帐号进行排序,以获得对象中所有帐号的最大数量?

ArrayList 是这样的:

ArrayList<Account> accountList = new ArrayList<Account>();

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

推荐答案

首先,为什么将帐户 number 表示为字符串?是数字还是文字?无论如何,绝对可以使用 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;
    }
}

本文地址:https://www.itbaoku.cn/post/978564.html