obter o valor da string do HashMap, dependendo do nome da chave


123

Eu tenho um HashMapcom várias chaves e valores, como posso obter um valor?

Eu tenho uma chave no mapa chamada my_code, ela deve conter uma string, como posso obtê-la sem precisar percorrer o mapa?

Até agora eu tenho ..

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

Espero ver um String, como "ABC" ou "DEF", como foi o que eu coloquei lá inicialmente, mas se eu fizer System.out.println()isso, recebo algo comojava.lang.string#F0454

Desculpe, eu não estou muito familiarizado com mapas, como você provavelmente pode adivinhar;)

Respostas:


166

Basta usar Map#get(key)?

Object value = map.get(myCode);

Aqui está um tutorial sobre mapas, que você pode achar útil: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Editar: você editou sua pergunta com o seguinte:

Espero ver uma String, como "ABC" ou "DEF", como foi o que coloquei lá inicialmente, mas se eu fizer um System.out.println (), recebo algo como java.lang.string # F0454

Desculpe, eu não estou muito familiarizado com mapas, como você provavelmente pode adivinhar;)

Você está vendo o resultado de Object#toString(). Mas o java.lang.Stringjá deveria ter uma implementado, a menos que você criou um personalizado implementação com um minúsculas sno nome: java.lang.string. Se for realmente um objeto personalizado, você precisará substituir Object#toString()para obter uma "sequência legível por humanos" sempre que fizer um System.out.println()ou toString()no objeto desejado. Por exemplo:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}

1
Obviamente, se você estiver criando uma classe de string personalizada, eu recomendaria (1) não fazer isso, pois provavelmente não é o que você deseja fazer e (2) se você for fazer isso, NÃO a coloque no namespace java.lang.
MatrixFrog

1
if HashMap <String, String> newMap = new HashMap <String, String> (); como obter elemento string a partir disso ...? onde String value = newMap.get ("my_code"); dá erro
saidesh kilaru

como você pode inverso? obter chave do valor?
delive

58

Se você estiver armazenando chaves / valores como seqüências de caracteres, isso funcionará:

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");

A questão é o que é preenchido no HashMap (chave e valor)


if HashMap <String, String> newMap = new HashMap <String, String> (); como obter elemento string a partir disso ...? onde String value = newMap.get ("my_code"); dá erro
saidesh kilaru

11

Se você usar Genéricos e definir seu mapa como

Map<String,String> map = new HashMap<String,String>();

buscando o valor como

 String s = map.get("keyStr"); 

você não precisará digitar o map.get () ou chamar o método toString para obter o valor String


9

Sua pergunta não está clara, eu tenho medo. Uma chave não tem um "nome"; não é "chamado" de nada no que diz respeito ao mapa - é apenas uma chave e será comparado com outras chaves. Se você tem muitos tipos diferentes de chaves, sugiro fortemente que você os coloque em mapas diferentes por uma questão de sanidade.

Se isso não ajudar, esclareça a pergunta - de preferência com algum código para mostrar o que você quer dizer.



6

Um ponto importante a ser observado aqui é que, se sua chave é um objeto da classe definida pelo usuário em java, faça questão de substituir o método equals. Como o método HashMap.get (chave do objeto) usa o método equals para corresponder ao valor da chave. Se você não substituir o método equals, ele tentará encontrar o valor simplesmente com base na referência da chave e não no valor real da chave; nesse caso, ele sempre retornará um valor nulo.


explicação gr8 mam :)
eLemEnt 30/09/16

3

Suponha que você tenha declarado o HashMap como: -

HashMap<Character,Integer> hs = new HashMap<>();

Em seguida, a chave no mapa é do tipo Tipo de dados de caractere e valor do tipo int. Agora, para obter o valor correspondente à chave, independentemente do tipo de chave, tipo de valor, sintaxe, é: -

    char temp = 'a';
    if(hs.containsKey(temp)){
`       int val = hs.get(temp); //val is the value corresponding to key temp
    }

Portanto, de acordo com sua pergunta, você deseja obter o valor da string correspondente a uma chave. Para isso, basta declarar HashMap como HashMap <"tipo de dados da chave", "tipo de dados do valor" hs = new HashMap <> (); Usar isso tornará seu código mais limpo e você também não precisará converter o resultado de hs.get ("my_code") em string, por padrão, retornará o valor da string se, no momento da entrada, mantivermos o valor como string.


1

Este é outro exemplo de como usar as funções keySet (), get (), values ​​() e entrySet () para obter chaves e valores em um mapa:

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());

0

Você pode usar o método get (chave do objeto) no HashMap. Esteja ciente de que em muitos casos sua classe de chave deve substituir o método equals, para ser uma classe útil para uma chave de mapa.


0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

O valor mapeado para Key 4éDD

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.