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

Como retornar um list de objetos vindo de um map?

No meu modelo de banco tenho associacões de contas e clientes sendo que cada conta é única e que cada cliente pode ter várias contas. Então tenho um método para buscar todas as contas de um cliente passando o cpf desse cliente como parametro:

public class Banco {
    private Map<Conta, Cliente> cadastro = new HashMap<Conta, Cliente>();

    public List<Conta> buscarContasCliente(String cpf){
        for(Entry<Conta, Cliente> cliente : cadastro.entrySet()) {
            List<Conta> contasClientes = new ArrayList<Conta>();
            if(cliente.getValue().getCpf() == cpf) {

                contasClientes.add(cliente.getKey());
                return contasClientes;
            }
        }
        throw new NoSuchElementException("conta não encontrada");
    }

Quando rodo o metodo so traz a ultima conta inserida no banco:

banco.inserir(conta1, new Cliente("filipe", "000.000.000.00"));
banco.inserir(conta2, new Cliente("filipe", "000.000.000.00"));
banco.inserir(conta3, new Cliente("filipe", "000.000.000.00"));
banco.inserir(conta4, new Cliente("filipe", "000.000.000.00"));
System.out.println(banco.buscarContasCliente("000.000.000.00"));

Onde estou errando?

2 respostas
solução!

Opa Felipe tudo bom contigo?

Acredito que o problema relatado é bem tranquilo de se resolver, é somente a posição dos códigos que você montou na hora de fazer a iteração do seu HashMap.

Tenta me acompanhar.

Quando você usa esse trecho de código:

List<Conta> contasClientes = new ArrayList<Conta>();

Você está declarando um ArrayList, mas ao fazer isso dentro de um for, você está inicializando(criando uma nova variável) toda vez que você fizer uma nova iteração. Logo apenas o ultimo elemento adicionado vai permanecer na sua lista.

Outro problema é você retornar a sua lista assim que ele encontra a primeira conta destinada a um cpf.

if(cliente.getValue().getCpf() == cpf) {
    contasClientes.add(cliente.getKey());
    return contasClientes;
 }

Acredito que você está procurando o trecho abaixo.

public class Banco {
    private Map<Conta, Cliente> cadastro = new HashMap<Conta, Cliente>();

    public List<Conta> buscarContasCliente(String cpf){
        List<Conta> contasClientes = new ArrayList<Conta>();
        for(Entry<Conta, Cliente> cliente : cadastro.entrySet()) {
            if(cliente.getValue().getCpf() == cpf) {
                contasClientes.add(cliente.getKey());
            }
        }
        if(contasClientes.isEmpty())
            throw new NoSuchElementException("conta não encontrada");

        return contasClientes;
    }

Da uma analisada, tenta entender o que tentei de passar, se não entender continua perguntando por aqui, vou acompanhar sua duvida. Espero ter ajudado e entendido sua duvida.

Bons estudos.

Era isso mesmo Ramon...tão simples e me passei; muito obrigado!