Olá, Alisson. Tudo bom?
Primeiramente, precisamos do método compareTo()
pois o Collections.sort()
utilizará este método para ordenar sua lista. Já que descrever como comparar os objetos da nossa classe é algo muito comum (diversas classes do proprio java também implementam esse comportamento) o pessoal já desenvolveu um "contrato" (interface) garantindo que todos que implementarem serão capazes de se comparar. Se você quiser, pode dar uma olhada na propria documentação do java:
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#sort(java.util.List)
Você perceberá que, obrigatóriamente, precisamos fornecer uma lista com objetos comparáveis. A implementação da interface é uma forma bem eficiente de garantir que todos os objetos daquela classe serão comparaveis. Além disso, ganhamos mais uma forma de nos referênciar a todos que são comparaveis. Outra vantagem da interface.
Você poderia escrever outro método que compare os objetos da sua classe, porém a ordenação deveria ser feita por você ao invés de usar o Collections.sort()
.
Quanto a lógica do método compareTo()
, precisamos de alguma forma representar 3 situações: caso seja maior, menor ou igual. Por isso retornamos -1 para menor, 0 para igual e 1 para maior. O critério para definir cada um desses casos, somos nós quem decidimos. Portanto:
public int compareTo(ContaCorrente outra) {
if(this.getSaldo() > outra.saldo){
return 1;
}
if(this.getSaldo() < outra.getSaldo()){
return -1;
}
return 0;
}
Neste código, estamos dizendo que caso o saldo da conta que chamou o método(this
) seja maior que o saldo da conta com a qual estamos comparando (ContaCorrente outra
), retornamos 1. Ou seja, estamos dizendo que a conta que chamou o método é maior que que a conta outra
. Depois verificamos o caso contrario, se o saldo é menor retornamos -1. Ou seja, se o saldo da conta que chamou o método for menor que o saldo da conta outra
dizemos que a conta que chamou o método é menor que a conta outra
. E o ultimo caso, no qual o saldo não é nem maior nem menor, retornamos 0 dizendo que são iguais. A ideia de utilizar o -1, 0 e 1 é que precisamos representar 3 casos e com, por exemplo, boolean
apenas conseguiriamos representar 2: true
ou false
.
Quanto a receber ContaCorrente no método compareTo()
, recebemos ContaCorrente, neste exemplo, pois o método está escrito na classe ContaCorrente. Então, é dedutivel que estaremos comparando duas contas corrente. Recebemos esse objeto como parametro para que possamos comparar quem chamar o método com algum outro objeto (toda comparação precisa de pelo menos 2 coisas) neste caso comparamos o this
(quem chama) com o outra
(conta que recebemos por parametro).
Espero ter ajudado de alguma forma =)