Neste exercicio estamos classificando apenas por numero de conta. Como faz para organizar por agencia e conta?
Neste exercicio estamos classificando apenas por numero de conta. Como faz para organizar por agencia e conta?
Olá Yaco, tudo bem com você?
No caso da agencia é fácil. Como tanto o número da conta como o número da agência são inteiros, basta aplicar a mesma lógica que fizemos no método compare()
.
@Override
public int compare(Conta c1, Conta c2) {
return Integer.compare(c1.getNumero(), c2.getNumero());
}
Porém, dessa vez vamos passar o número da agência como argumento para o Integer.compare()
.
@Override
public int compare(Conta c1, Conta c2) {
return Integer.compare(c1.getAgencia(), c2.getAgencia());
}
Já no caso da conta, acredito que você esteja se referindo ao objeto Conta, certo? Bom, nesse caso é apresentado uma excessão ClassCastException
, pois os objetos em si não são Comparables. Para isso, usaremos a ordem natural que vimos em aula, fazendo com que Conta implemente a interface Comparable e sobrescreva o método compareTo()
passando o critério de comparação, assim como fizemos com o saldo.
@Override
public int compareTo(Conta outra) {
return Double.compare(this.saldo, outra.saldo);
}
Espero que isso ajude. Se ficou alguma dúvida é só avisar!
Forte abraço e bons estudos!!
Acho que vc nao entendeu ou eu expliquei errado. Eu quero classificar por agencia, mas, se houver MAIS de uma conta na MESMA AGENCIA, as contas dentro da mesma agencia sejam classificadas por numero de conta.
Opa Yaco, acho que entendi errado mesmo. Bom, nesse caso podemos deixar o método compareTo()
dessa forma:
@Override
public int compareTo(Conta outra) {
int i = Integer.compare(this.agencia, outra.agencia);
if (i != 0) {
return i;
}
return Double.compare(this.numero, outra.numero);
}
Perceba que aqui estamos comparando as agencias e guardando o resultado na variável i, caso o resultado seja diferente de zero (ou seja, as agencias são diferentes) retornamos o resultado e mudamos a ordem das agencias na lista. Porém, caso as agências sejam iguais, mantemos a agencia e fazemos a comparação pelo seu numero. Complicado? Bom, temos uma forma bem simples de se fazer isso com o método Comparator.thenComparing()
que chegou no Java 8. Mas já vou avisando que esse é um assunto mais avançado que é abordado mais pra frente no curso de Java moderno, porém acho válido pelo menos mostrar que é possível fazer o mesmo que o código acima sem muito esforço com os recursos do Java 8. Então, todo aquele código pode ser substituído por uma única linha na sua classe Teste através das expressões lambda e default methods:
lista.sort(Comparator.comparing(Conta::getAgencia).thenComparing(Conta::getNumero));
Então, para ordenar a lista pegamos um Comparator que compara a agencia da Conta e então compara (thenComparing) o número da Conta. Simples assim!
Espero que isso ajude. Se tiver alguma dúvida estou à disposição!
Abraços e bons estudos!!
Entendi, muito obrigado.