Obter chave e valor de um Map

Bom dia á todos!!

Tem como obter a chave e o valor de um Map diretamente? Para obter a chave to fazendo assim:

[code]Set candidatos = map.keySet(); // NAO SEI SE TA CERTO SE TIVER OUTRO MODO ME AJUDEM :smiley:

for(String nome : candidatos){

System.out.println(nome);

}[/code]

e para obter o valor eu uso map.get(Object key)...

Não entendi a dúvida. O que você quer dizer com obter a chave?

Para obter o valor tendo a chave, usa-se o método get mesmo.

Não sei ao certo o que você está querendo, mas no seu código você está recuperando um Set com todas as chaves de um Map, e depois pra cada chave você está recuperando o valor dela… isso serve pra quando você não sabe as chaves que existem no seu Map…

Pra obter diretamente, você deve saber antecipadamente quais valores existem, daí você pode acessar diretamente o registro… exemplo:

[code]Map<String, Object> map = new TreeMap<String, Object>();
// …
// alguma coisa adiciona valores no meu Map…
// …

/* E eu sei antecipadamente que existe um registro cuja chave é “1”,

  • logo eu posso recuperá-lo diretamente
    */
    Object obj = map.get(“1”);[/code]

Não sei se é isso que você estava falando… :roll:

Se eu entendi o que vc quer.

map.entrySet()

retorna um Set<Map.Entry<String,String>> ai voce consegue iterar sobre esse set tendo a chave e o valor.

È pq eu preciso exatamente da chave e do valor adicionado.

ex:

tenho: Map<String,Integer> map…

no codigo eu faço: map.put(“Everton”,3);

Depois eu preciso pegar a chave “Everton” com o seu valor 3.

[quote=evertonsilvagomesjava]È pq eu preciso exatamente da chave e do valor adicionado.

ex:

tenho: Map<String,Integer> map…

no codigo eu faço: map.put(“Everton”,3);

Depois eu preciso pegar a chave “Everton” com o seu valor 3.[/quote]

Integer valor = (Integer)map.get("Everton");

Isso?

Para que usar Map se você não vai acessar via chave?

Eu conseguir fazer aqui, eu preciso do map pq é um sisteminha de eleição :lol:, daí eu vinculo o candidatos com seus numeros de votos respectivos, como pode haver uma possibilidade de segundo turno eu preciso imprimir quais candidatos e quantos votos tiveram parar ir para o 2º turno. Mas consegui aqui.

Sim, nesse caso use o EntrySet como o colega falou.

Deve ficar mais ou menos assim:

for (Map.Entry<String, Integer> candidatoEntry : candidatos.entrySet()) { System.out.println("Candidato: %s Votos: %d%n", candidatoEntry.getKey(), candidatoEntry.getValue()); }

Para casos como esse, é uma boa usar um TreeMap. Aí os nomes já saem ordenados. :slight_smile:

Cuidado com candidatos homônimos, como José da Silva. O ideal é fazer um Map<Candidato, Integer> e não <String, Integer>.

[quote=ViniGodoy]Sim, nesse caso use o EntrySet como o colega falou.

Deve ficar mais ou menos assim:

for (Map.Entry<String, Integer> candidatoEntry : candidatos.entrySet()) { System.out.println("Candidato: %s Votos: %d%n", candidatoEntry.getKey(), candidatoEntry.getValue()); }

Para casos como esse, é uma boa usar um TreeMap. Aí os nomes já saem ordenados. :slight_smile:

Cuidado com candidatos homônimos, como José da Silva. O ideal é fazer um Map<Candidato, Integer> e não <String, Integer>.[/quote]

Vini brigado pela ajuda novamente, tem como vc me explicar um pouco sobre o Map.Entry<>? Sobre á questao do Candidato na chave em vez de uma String eu vou alterar é pq no meu caso so tenho 3 candidatos para fazer testes. Mas vou alterar como vc falou.

O Map.Entry é um objeto com duas propriedades. getKey() e getValue().
Ela contém a chave do seu mapa e o valor associado aquela chave.

O mapa então retorna para você um conjunto de todas as entries dentro dele.

[quote=ViniGodoy]O Map.Entry é um objeto com duas propriedades. getKey() e getValue().
Ela contém a chave do seu mapa e o valor associado aquela chave.

O mapa então retorna para você um conjunto de todas as entries dentro dele.[/quote]

Hum entendi acada iteração entrySet passa para o Map.Entry o par chave e valor :smiley:

Acho q vc quer:

Map m = new QualquerCoisaMap(); Set keys = m.keySet();
Depois, itere em keys e use o metodo get normalmente.

for(Object key : keys) { Object value = m.get(key); }

[quote=luciano@@]Para que usar Map se você não vai acessar via chave?
[/quote]
Na verdade, podem existir situações onde isso pode ser necessário :?

Não consigo me lembrar qual era a necessidade mas já tive que obter todas as keys e iterar, obtendo seus respectivos valores (ps, não eram Strings, mas objetos :wink: ).

Outra necessidade é, quando vc precisa tratar primeiramente TODAS as chaves (listar todas as keys com option button e, ao selecionar um item, exibir o valor correpondente.