Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] Erro de Compilação no Sort , utilizando override da class Compare

Pessoal, boa tarde !!!

Estou com um Erro de Compilação para fazer um Sort de uma lista. Alguém pode me ajudar ??

Abraços !!

===> estou utilizando JDK 17.0.5

Referente ao curso Java e java.util: Coleções, Wrappers e Lambda expressions, no capítulo Ordenação de listas (item 7) Link da aula ==> https://cursos.alura.com.br/course/java-util-lambdas/task/37830

Implementei o código abaixo, a princípio de acordo com a aula, mas dá erro de compilação no comando ==> lista.sort(ordenado);

package testArrayListas; import java.util.ArrayList; import java.util.Comparator; import java.util.List;

import arrayAndList.Conta; import arrayAndList.ContaCorrente; import arrayAndList.ContaPoupanca;

public class TestaSortLista {

public static void main(String[] args) {
    Conta cc1 = new ContaCorrente(22, 33);

    Conta cc2 = new ContaPoupanca(22, 44);

    Conta cc3 = new ContaCorrente(22, 11);

    Conta cc4 = new ContaPoupanca(22, 22);

    List<Conta> lista = new ArrayList<>();
    lista.add(cc1);
    lista.add(cc2);
    lista.add(cc3);
    lista.add(cc4);

    for (Conta conta : lista) {
        System.out.println(conta);
    }

    System.out.println("-------------------------------");

    for (Conta conta : lista) {

        System.out.println(conta);

    }

    NumeroDaContaComparator ordenado = new NumeroDaContaComparator();
    lista.sort(ordenado);     **ERRO : **The method sort(Comparator<? super Conta>) in the type List<Conta> is not applicable for the arguments (NumeroDaContaComparator)

    class NumeroDaContaComparator implements Comparator<Conta> {

        @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
solução!

Boa noite Andre, tudo bem?

Com algumas correções basicas seu codigo funcionou:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O problema é que voce esta declarando a classe "NumeroDaContaComparator" dentro das chaves da classe principal porem ela deve ficar fora. Recomendo revisar esse ponto e ajustas as chaves {}.

Segue exemplo:

package br.com.bytebank.banco.test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import br.com.bytebank.banco.model.Conta;
import br.com.bytebank.banco.model.ContaCorrente;
import br.com.bytebank.banco.model.ContaPoupanca;

public class TesteForum {

    public static void main(String[] args) {

        Conta cc1 = new ContaCorrente(22, 33);
        Conta cc2 = new ContaPoupanca(22, 44);
        Conta cc3 = new ContaCorrente(22, 11);
        Conta cc4 = new ContaPoupanca(22, 22);

        List<Conta> lista = new ArrayList<>();
        lista.add(cc1);
        lista.add(cc2);
        lista.add(cc3);
        lista.add(cc4);

        for (Conta conta : lista) {
            System.out.println(conta);
        }

        System.out.println("-------------------------------");



        NumeroDaContaComparator ordenado = new NumeroDaContaComparator();
        lista.sort(ordenado);
        for (Conta conta : lista) {

            System.out.println(conta);

        }
    }
}

class NumeroDaContaComparator implements Comparator<Conta> {
    @Override
    public int compare(Conta c1, Conta c2) {

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

Abraço!

Oi Fernando,

Era isso mesmo. Funcionou !!!

Obrigado ..

Abraços.