Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Ordenamento por ordem alfabética não é realizado

Olá. Poderiam me ajudar no código abaixo? As contas não são reordenadas pelo nome.

package br.com.bytebank.banco.teste.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import br.com.bytebank.banco.modelo.*;

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

public class TesteClasseAnonima {
    public static void main(String[] args) {
        Conta cc1 = new ContaCorrente(22, 33);
        Cliente clienteCC1 = new Cliente();
        clienteCC1.setNome("Nico");
        cc1.setTitular(clienteCC1);
        cc1.deposita(333.0);

        Conta cc2 = new ContaPoupanca(22, 44);
        Cliente clienteCC2 = new Cliente();
        clienteCC2.setNome("Guilherme");
        cc2.setTitular(clienteCC2);
        cc2.deposita(444.0);

        Conta cc3 = new ContaCorrente(22, 11);
        Cliente clienteCC3 = new Cliente();
        clienteCC3.setNome("Paulo");
        cc3.setTitular(clienteCC3);
        cc3.deposita(111.0);

        Conta cc4 = new ContaPoupanca(22, 22);
        Cliente clienteCC4 = new Cliente();
        clienteCC4.setNome("Ana");
        cc4.setTitular(clienteCC4);
        cc4.deposita(222.0);

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

        Comparator<Conta> comp = new Comparator<Conta>() {

            @Override
            public int compare(Conta c1, Conta c2) {
                String nomeC1 = c1.getTitular().getNome();
                String nomeC2 = c1.getTitular().getNome();
                return nomeC1.compareTo(nomeC2);
            }
        };

        lista.sort(comp);

        for (Conta conta : lista) {
            System.out.println(conta + ", " + conta.getTitular().getNome());
        }

    }
}

Saída:

Conta Corrente, Numero: 33, Agencia: 22, Nico
Conta Poupança, Numero: 44, Agencia: 22, Guilherme
Conta Corrente, Numero: 11, Agencia: 22, Paulo
Conta Poupança, Numero: 22, Agencia: 22, Ana
1 resposta
solução!

Bom dia Roger.

No nomeC2 você está pegando o titular da conta C1. Faltou apenas você trocar para C2.

String nomeC2 = c2.getTitular().getNome();

Como está:


            @Override
            public int compare(Conta c1, Conta c2) {
                String nomeC1 = c1.getTitular().getNome();
                String nomeC2 = c1.getTitular().getNome();
                return nomeC1.compareTo(nomeC2);
            }
        };

Correto:

 @Override
            public int compare(Conta c1, Conta c2) {
                String nomeC1 = c1.getTitular().getNome();
                String nomeC2 = c2.getTitular().getNome();
                return nomeC1.compareTo(nomeC2);
            }
        };