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

Dúvida no Ex. 3 da Aula 6 - Aumentando a flexibilidade com injeção de dependências

Bom dia galera. Mais uma dúvida:

Estou tentando certificar que minhas dívidas estão sendo guardadas no meu "banco", no HashMap, porém quando eu tento varrer a collection estou recebendo um erro:

"Can only interate over a array or a intance of java.lang.Iterable"

import java.util.HashMap;
import java.util.Map;


public class BancoDeDados implements ArmazenadorDeDividas{
    private Map<Documento, Divida> dividas=new HashMap<Documento, Divida>();

    public BancoDeDados(String servidor, String usuario, String senha) {
        System.out.println("Conectado");
    }

    public void desconecta() {
        System.out.println("BD Desconectado!");
    }


    public void grava(Divida divida) {

        this.dividas.put(divida.getDocumentoCredor(), divida);

        System.out.println("Lista documento:");
        for (Divida elementoDeDividas : this.dividas) {
            elementoDeDividas.getDocumentoCredor();
        }
    }

    public Divida busca(Documento documento) {
        return this.dividas.get(documento.getValor());

    }

}

Como o atributo dividas é um HashMap, ele deveria ser um Iterable, ou não? O que estou fazendo errado?

3 respostas
solução!

Ola, Rodrigo Salomao !

Para esse caso, poderia fazer assim no seu for:

    for (Divida elementoDeDividas : this.dividas.values()) {
            elementoDeDividas.getDocumentoCredor();
        }

O método .values() vai retornar uma Collection de acordo com o valor que foi definido para seu Map, nesse caso sera uma Collection<Divida>.

Abraço!

Obrigado Cristiano era isso mesmo.

Porém estou tentando trazer a divida do Collection, buscando pelo numero do documento e não esta vindo, esta retornando null. Onde estou errando?

Classe BancoDeDados

import java.util.HashMap;
import java.util.Map;

public class BancoDeDados implements ArmazenadorDeDividas {
    private Map<Documento, Divida> dividas = new HashMap<Documento, Divida>();

    public BancoDeDados(String servidor, String usuario, String senha) {
        System.out.println("Conectado");
    }

    public void desconecta() {
        System.out.println("BD Desconectado!");
    }

    public void grava(Divida divida) {

        this.dividas.put(divida.getDocumentoCredor(), divida);

    }

    public Divida busca(Documento documento) {
        return this.dividas.get(documento.getValor());

    }

}

BalancoEmpresa

public class BalancoEmpresa {
    private ArmazenadorDeDividas armazenadorDeDividas;

    public BalancoEmpresa(ArmazenadorDeDividas armazenador) {
        this.armazenadorDeDividas = armazenador;

    }

    public void registraDivida(Divida divida) {
        this.armazenadorDeDividas.grava(divida);

    }

    public void pagaDivida(Documento documentoCredor, Pagamentos pagamento) {
        Divida divida =      this.armazenadorDeDividas.busca(documentoCredor);
        if (divida != null) {
            divida.registra(pagamento);
        }
    }

}

Ola, Rodrigo Salomao !

Quando vc passar o documento para esse método, certifique-se de que o documento que vc esta passando EXISTE no seu MAPA de dividas.

Outra coisa,

O Mapa funciona como [ chave x valor ] sua chave é Documento e o valor é a Divida.

private Map<Documento, Divida> dividas = new HashMap<Documento, Divida>();

Certo ?

Seu método que busca a Dívida, esta buscando no seu MAPA pegando do documento o método:

documento.getValor()

Note que a chave do seu MAPA é Documento e na busca vc faz documento.getValor(). Precisamos saber o que esse getValor() esta retornando.

E como sua Classe Documento esta implementada, inclusive o equals() e hashCode() .

public Divida busca(Documento documento) {
        return this.dividas.get(documento.getValor());

    }

Poste o código da classe Documento e a classe que vc esta usando para testar tudo isso, por favor.

Vamos analisar !

Abraço!