2
respostas

porque do retorno no primeiro if é -1, e no segundo if 1 ??

class NumeroDaContaComparator implements Comparator {

    @Override
    public int compare(Conta c1, Conta c2) {

            if(c1.getNumero() < c2.getNumero()) {
                return -1;
            }

            if(c1.getNumero() > c2.getNumero()) {
                return 1;
            }

        return 0;
    }

}

2 respostas

Fala Diego, tudo certo?

Primeiro temos que entender como um Comparator se comporta: quando passamos dois parâmetros para essa função, queremos ordená-la de acordo com os nossos critérios, correto? Acontece que para o compilador entender qual a conta que deve ser ordenada prioritariamente, retornam-se valores diferentes. Se você der uma olhadinha ao passar o mouse por cima da função vai ter uma explicação mais correta do que quero dizer. Enfim, a ordem é a seguinte:

Se o objeto passado como parâmetro O1 vier antes do O2, retorna-se um valor positivo (independente do valor). Caso contrário, retorna-se um valor negativo. Se os objetos possuem a mesma relevância, retorna-se 0.

Isso é o mesmo que retornar por exemplo a seguinte expressão:

return c1.getNumero()-c2.getNumero();

Analisando a expressão acima, sabemos que se o número da conta1 for maior, o valor retornado será positivo. Caso seja menor, o número será negativo. Caso seja igual, o valor retornado será 0. A partir desse valor retornado é que é feita a comparação, se um objeto é mais relevante que o outro de acordo com o critério.

Confesso que estou lendo e relendo, mas ainda não entendi. Não entendo de que maneira a ordenação é feita. E de que maneira o retorno do valor positivo, e outro com valor negativo ou caso sejam iguais retorna 0 influenciam nisso.