[RESOLVIDO]Recuperar os valores de uma chave em um Map

3 respostas
Cris_Finholdt

Deu um surto de esquecimento aqui, segue o código:

package com.teste;

import java.util.*;

public class Teste{
  @SuppressWarnings("unchecked")
  public static void main(String[] args){
    
    // vamos criar uma instância de HashMap
    HashMap clientes = new HashMap();

    // vamos adicionar três chaves e seus valores
    clientes.put(new Integer(1), "Osmar J. Silva");
    clientes.put(new Integer(1), "Cris Finholdt");
    clientes.put(new Integer(2), "Salvador Miranda de Andrade");
    clientes.put(new Integer(2), "Dani Baladao");
    clientes.put(new Integer(3), "Marcos da Costa Santos");
      
    // vamos obter uma view dos mapeamentos
    Set set = clientes.entrySet();

    // obtemos um iterador
    Iterator i = set.iterator();

    // e finalmente exibimos todas as chaves e seus valores
    while(i.hasNext()){
      Map.Entry entrada = (Map.Entry)i.next();
      System.out.println("Código: " + entrada.getKey() + 
        " - Cliente: " + entrada.getValue());
    }

    System.exit(0);
  }
}

Do jeito q tah ele mostra:

Código: 1 - Cliente: Cris Finholdt
Código: 2 - Cliente: Dani Baladao
Código: 3 - Cliente: Marcos da Costa Santos

Eu queria que mostrasse:

Código: 1 - Cliente: Osmar J. Silva
Código: 1 - Cliente: Cris Finholdt
Código: 2 - Cliente: Salvador Miranda de Andrade
Código: 2 - Cliente: Dani Baladao
Código: 3 - Cliente: Marcos da Costa Santos

Tem jeito? Ou quando eu insiro o segundo valor à chave, ele substitui o primeiro valor pelo segundo?
Se nao tiver jeito, alguem sabe como eu posso obter essa resposta?

3 Respostas

peczenyj

Um Map é um mapeamento de um objeto (a chave) para um valor arbitrario (o valor)

Quando vc fez:

clientes.put(new Integer(1), "Osmar J. Silva"); clientes.put(new Integer(1), "Cris Finholdt");

Primeiro Vc criou um mapeamento entre o valor 1 (Integer) e o valor “Osmar …”, depois substituiu pelo valor Cris. Funciona como um Array, nesse caso. Se vc faz put(X,Y), o get(X) tem que retornar o ultimo Y (senão vc vai recuperar algum elemento especifico como?)

Se vc quer este comportamento, tem que indexar por outra coisa. De repente vc pode usar um List para armazenar um par de valores, um codigo e um nome. Esse par pode ser um objeto criado por vc que tenha estes atributos.

Agora, se vc esta fazendo @SuppressWarnings(“unchecked”) significa que vc esta usando java 1.5 ou superior. Vc pode usar for-each ( http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html ) para iterar e poderia criar um HashMap<Integer,String> para facilitar as coisas :wink:

Veja mais dicas aqui
http://guj.com.br/article.list.logic

Vini_Fernandes

Cara, para obter a funcionalidade que deseja faça o seguinte:

import java.util.*;  
      
    public class Teste{  
      @SuppressWarnings("unchecked")  
      public static void main(String[] args){  
          
        // vamos criar uma instância de HashMap  
       HashMap<Integer, List<String>> clientes = new HashMap<Integer, List<String>> ();  
       List<String> nomes = new ArrayList<String>();
       
       nomes.add("Osmar J. Silva");
       nomes.add("Cris Finholdt");
       clientes.put(new Integer(1), nomes);  
         
       nomes = new ArrayList<String>();
       nomes.add("Salvador Miranda de Andrade");
       nomes.add("Dani Baladao");
       clientes.put(new Integer(2), nomes);  
         
       nomes = new ArrayList<String>();
       nomes.add("Marcos da Costa Santos");
       clientes.put(new Integer(3), nomes);  
     
       for (Integer codigo : clientes.keySet()) {
    	   for (String nome : clientes.get(codigo)) {
    		   System.out.println("Código: " + codigo  +   
        	           " - Cliente: " + nome);
    	   }
       }
       
     
        
     }  
   }

T+

Cris_Finholdt

Vini, obrigada! Era isso mesmo que eu precisava! Demorei pra postar pq tava mto ocupada esses dias…

Criado 20 de fevereiro de 2010
Ultima resposta 5 de mar. de 2010
Respostas 3
Participantes 3