gpt4 book ai didi

java - 对对象的 ArrayList 进行排序?

转载 作者:行者123 更新时间:2023-12-01 17:32:27 25 4
gpt4 key购买 nike

我需要一些帮助来对对象的 ArrayList 进行排序。我有父类(super class) Account 和两个子类 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;
}
}

关于java - 对对象的 ArrayList 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9679769/

25 4 0