使用 ArrayList 和 compareTo 对文件的结果进行排序

Ordering the results of an file with ArrayList and compareTo

我必须按帐户 ID 然后按薪水订购一个包含来自文件的行的 arrayList 以获得此结果:

CuentaAhorro   : 11111111A (Alicia)   Saldo  111,11
CuentaAhorro   : 12345678A (Lucas)    Saldo 5100,00
CuentaCorriente: 22222222B (Peio)     Saldo  222,22
CuentaAhorro   : 33333333C (Isabel)   Saldo 4433,33
CuentaCorriente: 33333333C (Isabel)   Saldo 3333,33
CuentaAhorro   : 87654321A (Asier)    Saldo 3000,00

我的 arrayList 从 Bank.java 调用 compareTo 方法。


 public void ordenarCuentas() {

            Collections.sort(cuentas);

        }

调用是在抽象 class 中调用具有可比较接口的帐户的方法 compareTo:

   @Override
   public int compareTo(Cuenta unaCuenta) {

      Cliente unTitular = unaCuenta.titular;

      if(unTitular.toString().equals(unaCuenta.titular.toString()) == true) {
            return 0;
//         if(saldo < unaCuenta.saldo) {
//             return -1;
//          } else if (saldo > unaCuenta.saldo) {
//             return 1;
//          } else {
//             return 0;
//          }
      }
        return -1;    
}

我需要检查作为参数传递的对象 'Cuenta unaCuenta' 是否与另一个对象具有相同的帐号,然后按帐户中的金额排序,但我不确定如何获得条件是的,如您所见,如果我按正确的降序而不是帐户 ID 获得薪水,则有评论。

对象 Cuenta unaCuenta 包含 titular,其中包含帐号和名称。

对象 Cliente unTitular 包含帐号和姓名。

有人可以帮我吗?

由于语言不通,我不是很清楚 但是如果你有一个数组列表,你可以调用它的排序方法并传递一个比较器来获得所需的排序,如下所示。

只是给大家一个思路

 ArrayList<String> list = new ArrayList<>();
     list.sort(new Comparator() {

        @Override
        public int compare(Object o1, Object o2) {

            if(o1.account.equals(o2.account)) return 0;
            return o1.amount - o2.amount;
        }

     });

作为 Lambda

ArrayList<String> list = new ArrayList<>();
     list.sort((o1,o2) -> 
                          if(o1.account.equals(o2.account)) return 0;
                          return o1.amount - o2.amount; 
     });

谢谢大家的评论。下次我会将西班牙语代码翻译成英语。我会 post 我的解决方案,以防有人遇到这个问题。

(在我的例子中,我必须使用可比较的接口和 compareTo 方法)。

 @Override
   public int compareTo(Account anAccount) {

        String b = this.title.toString();
        Client aTitle = anAccount.title;
        String c = aTitle.toString();

        if(b.compareTo(c) == 0) {
            if(balance == anAccount.balance) {
               return 0;
            } else if (balance < anAccount.balance) {
               return 1;
            } else {
               return -1;
            }
           } 
            return b.compareTo(c);

         }

如前所述,我必须先比较两个对象的值,如果它们相同,然后检查余额的情况以更改顺序。

-1 = object is less than the parameter.
0 = when both objects are the same.
1 = the object is more than the parameter.

然后我从 Bank.java class 调用了方法:

Collections.sort(cuentas);

其中 cuentas 是 ArrayList。