使用 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。
我必须按帐户 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。