在对对象数组进行排序时,使用可比较的2排序标准

时间:2012-12-09 03:59:31

标签: java arrays sorting methods

我已经在这里工作了几个小时了,我觉得(我希望)我正处于搞清楚的边缘。这个程序从外部文件中读取一堆值,并将它们放在一个似乎工作得很好的对象数组中。

对象属性是:
银行账户 # 顾客姓名 银行账户余额

1。我可以按帐户#的顺序输出它们(这是他们从文件读取的方式,不需要排序)

2。我已经设置了一种方法,从实施Comparable到按银行帐户余额排序,并且工作正常。

3。我需要第二种排序方法,按客户名称排序。       - 我遇到的问题是基于我已经完成的研究和我尝试过的事情我得出结论,使这项工作的唯一方法是建立我自己的可比对象(对不起,如果我的术语是偏斜的。)我已经多次尝试使用Java Doc和SE上的一些类似问题。

完成所有操作后,我将把一些监听器放入我的复选框组,以允许用户切换不同的排序方法。

以下是我正在研究的部分:

 public class bankAccounts implements Comparable<bankAccounts> {
/* PRIVATE FIELDS HERE, FOLLOWED BY TYPICAL GET AND SET METHODS */

 /*SORTS BY ACCOUNT BALANCE WORKING GREAT*/
 public int compareTo(bankAccounts b)   {
    if (accountBalance < b.accountBalance)
    {
        return -1;
    }
    if (accountBalance > b.accountBalance)  {
        return 1;
    }
    return 0;
}


       /* BEGIN SNIPPET OF MAIN CLASS */


      /*METHOD I CALL FROM MAIN CLASS, SORTS BY BALANCE ^^ AS SEEN ABOVE */
Arrays.sort(retrievedAccounts);
for (int i=0; i<retrievedAccounts.length; i++)  {
    String resultFull = Integer.toString(retrievedAccounts[i].getAccountNumber()) + retrievedAccounts[i].getAccountLastName() + Double.toString(retrievedAccounts[i].getAccountBalance());
        box.append(resultFull + "\n");
}

/* NORMAL METHOD WHICH OUTPUTS IN ORDER OF ACCOUNT NUMBER, NO SORTING HAPPENING HERE */
        for(int x = 0; x < retrievedAccounts.length; ++x)
{
    String resultFull=Integer.toString(retrievedAccounts[x].getAccountNumber()) + retrievedAccounts[x].getAccountLastName() + Double.toString(retrievedAccounts[x].getAccountBalance());
    box.append("\n\n\n" + resultFull + "\n\n");
} 

我希望有人能够对下一步有所了解,这可能会让我完成这个任务。如果您有建议将这个方向视为一个完全不同的方向,我也会对此持开放态度。

2 个答案:

答案 0 :(得分:0)

使用Comparator<bankAccounts>的实现来比较对象的名称并将其传递到Arrays.sort()方法。

使用这样的匿名类:

Arrays.sort(retrievedAccounts, new Comparator<bankAccounts>() {
    public int compare(bankAccounts a, bankAccounts b) {
        return a.getName().compareTo(b.getName());
    }
});

此代码假设您在bankAccounts上有一个名为getName()的客户名称的getter方法
你最好遵循java命名约定:

  • 班级名称以大写字母开头
  • 类名是单数,而不是复数

答案 1 :(得分:0)

这是一个未经测试的想法。

创建另一个私有方法来存储compareType

public class bankAccounts implements Comparable<bankAccounts> {

private int compareType = 0; // 0 - compare by balance 1-compare by name

在比较方法中

public int compareTo(bankAccounts b)   {
if(this.compareType == 0){
if (accountBalance < b.accountBalance)
{
    return -1;
}
if (accountBalance > b.accountBalance)  {
    return 1;
}
return 0;
}else{
 return customerName.compareTo(b.customerName)
}