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

Duvida

estou com algumas duvidas no metodo aqui, primeiramento porque usamo essa instancia aqui?

private Map<String, Conta> indexadoPorNome = new HashMap<>();
    public void adiciona(Conta c){
        contas.add(c);
        indexadoPorNome.put(c.getCliente().getNome(), c); // estou com duvida nessa linha tambem, oque exatamente essa linha faz?
    }

E nessa parte oque exatamento retorna?

public Conta buscarPorNome(String nome){
        return indexadoPorNome.get(nome);
    }
3 respostas
solução!

Oi Alisson,

Lembrando alguns conceitos.

  1. Um HashMap, é um Mapa. Por isso, tem chave e valor.

  2. Para adicionarmos um valor no mapa, devemos passar também a chave para este valor específico.

  3. Para pegarmos um valor do mapa, só precisamos informar a chave e ele retornará o valor para nós.

Exemplo:

"Alisson" -> Conta 1234

"Lucas" -> Conta 5678

Legal, agora vamos lá:

private Map<String, Conta> indexadoPorNome = new HashMap<>();

Aqui criamos uma instancia de HashMap, este é um mapa que recebe uma String como chave, e uma Conta como valor.

Quanto ao método adiciona():

public void adiciona(Conta c){
        contas.add(c);
        indexadoPorNome.put(c.getCliente().getNome(), c);  //adicionando no mapa, metodo put()
    }

na linha que você perguntou, chamamos o método put() do mapa. Que adiciona um Nome do Cliente como chave e a Conta dele como valor. Para facilitar a leitura do código, poderíamos escrever assim:

String nomeDoCliente = c.getCliente().getNome();
 indexadoPorNome.put(nomeDoCliente, c);

Quanto ao método buscarPorNome()

public Conta buscarPorNome(String nome){
        return indexadoPorNome.get(nome);
    }

Queremos retornar uma Conta informando apenas o nome do cliente. Para isso, usamos o método get() passando o nome do cliente por parâmetro. Exemplo: indexadoPorNome.get("Lucas"), retorna Conta 5678.

Olá Alisson, beleza?

A ideia do map é que possamos relacionar dados a uma chave e buscar pela chave. Portanto, nessa instancia:

private Map<String, Conta> indexadoPorNome = new HashMap<>();

estamos criando uma estrutura de dados que relacionará uma String que será nossa chave a um valor do tipo Conta. Pelo nome da variavel já fica evidente que nossa chave será o nome de cada conta.

O método adiciona, simplesmente recebe uma Conta c e adiciona ela no nosso map:

public void adiciona(Conta c){
        contas.add(c); // aqui adicionamos nossa `Conta c` na lista contas

        indexadoPorNome.put(c.getCliente().getNome(), c);// aqui adicionamos nossa `Conta c` no map pelo método put(). O primeiro atributo que passamos é a chave c.getCliente() o segundo é o valor c. Ou seja, estamos adicionando nossa conta com a chave c.getCliente()
    }

Portanto, o método busca por nome acessa nosso map e nos retorna a conta referente a String nome que recebemos como parametro:

public Conta buscarPorNome(String nome){
        return indexadoPorNome.get(nome); // busca a chave nome no nosso map através do método get()
    }

Mais uma vez Lucas obrigado, está me salvando nas minhas duvidas, :) vlw tambem Andre!