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

Duvida - keySet e values

Fiz, achei que entendi keySet e values Esperava nome na linha System.out.println(nomesParaIdade.get(valor));// mostra null , esperava String nome

Funcionou com System.out.println(valor);

e a mesma coisa com idade.

package br.com.alura;

import java.util.*;
import java.util.Map.Entry;

public class TesteMap {

    public static void main(String[] args) {

        Map<String, Integer> nomesParaIdade = new HashMap<>();
        nomesParaIdade.put("Paulo", 31);
        nomesParaIdade.put("Adriano", 25);
        nomesParaIdade.put("Alberto", 33);
        nomesParaIdade.put("Guilherme", 26);
      //Tente iterar (foreach) em cima das chaves e valores separadamente!

        System.out.println(nomesParaIdade.keySet());// imprimir chaves (que no caso e nome)
        System.out.println(nomesParaIdade.values());// imprimir valores


        nomesParaIdade.keySet().forEach(chave -> {
            System.out.println(chave);
            //System.out.println(nomesParaIdade.get(chave));// mostra int idade
        });

        nomesParaIdade.values().forEach(valor -> {
            System.out.println(valor);
            //System.out.println(nomesParaIdade.get(valor));// mostra null , esperava String nome
        });

        nomesParaIdade.entrySet().forEach(associacao -> {
            System.out.println(associacao);
        });

    }
}
2 respostas
solução!

Olá, James. A função get de um Map recebe uma chave e retorna o valor associado a ela, mas não faz o contrário. Para você conseguir as pessoas associadas à idade que você tem em mãos (já que podem existir diversas pessoas com a mesma idade), você terá que percorrer o seu conjunto comparando os resultados obtidos com cada chave. Uma possível implementação é a seguinte:

nomesParaIdade.values().forEach(valor -> {
    nomesParaIdade.keySet().forEach(chave -> {
        Integer idade = nomesParaIdade.get(chave);
        if (valor == idade) {
            System.out.println(chave);
        }
    });
});

"mas não faz o contrário" - era isso que tentei! Sempre precisa de key para achar value.