obtenir la valeur de chaîne de HashMap en fonction du nom de la clé

123

J'ai un HashMapavec différentes clés et valeurs, comment puis-je obtenir une valeur?

J'ai une clé dans la carte appelée my_code, elle doit contenir une chaîne, comment puis-je simplement l'obtenir sans avoir à parcourir la carte?

Jusqu'à présent, j'ai ...

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

Je m'attends à voir un String, tel que "ABC" ou "DEF" car c'est ce que j'ai mis là-dedans au départ, mais si je fais un, System.out.println()j'obtiens quelque chose commejava.lang.string#F0454

Désolé, je ne connais pas trop les cartes comme vous pouvez probablement le deviner;)

Jimmy
la source

Réponses:

166

Juste utiliser Map#get(key)?

Object value = map.get(myCode);

Voici un tutoriel sur les cartes, vous pouvez le trouver utile: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Modifier: vous avez modifié votre question avec les éléments suivants:

Je m'attends à voir une chaîne, telle que "ABC" ou "DEF", car c'est ce que j'ai mis là au départ, mais si je fais un System.out.println (), j'obtiens quelque chose comme java.lang.string # F0454

Désolé, je ne connais pas trop les cartes comme vous pouvez probablement le deviner;)

Vous voyez le résultat de Object#toString(). Mais l' java.lang.Stringaurait déjà dû une mise en œuvre, à moins que vous avez créé une mesure mise en œuvre par une minuscule sau nom: java.lang.string. S'il s'agit en fait d'un objet personnalisé, vous devez le remplacer Object#toString()pour obtenir une "chaîne lisible par l'homme" chaque fois que vous effectuez un System.out.println()ou toString()sur l'objet souhaité. Par exemple:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}
BalusC
la source
1
Bien sûr, si vous créez une classe de chaîne personnalisée, je recommanderais (1) de ne pas le faire, car ce n'est probablement pas ce que vous voulez faire, et (2) si vous allez le faire, NE le mettez PAS dans le espace de noms java.lang.
MatrixFrog
1
if HashMap <String, String> newMap = new HashMap <String, String> (); comment obtenir un élément de chaîne à partir de cela ...? où Valeur de chaîne = newMap.get ("mon_code"); donne une erreur
saidesh kilaru
comment vous pouvez inverser? obtenir la clé de la valeur?
livraison
58

Si vous stockez des clés / valeurs sous forme de chaînes, cela fonctionnera:

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

La question est de savoir ce qui est renseigné dans le HashMap (clé et valeur)

jeff porter
la source
if HashMap <String, String> newMap = new HashMap <String, String> (); comment obtenir un élément de chaîne à partir de cela ...? où Valeur de chaîne = newMap.get ("mon_code"); donne une erreur
saidesh kilaru
11

Si vous utilisez des génériques et définissez votre carte comme

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

puis récupérer la valeur comme

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

vous n'aurez pas besoin de transtyper le map.get () ou d'appeler la méthode toString pour obtenir la valeur String

Shirishkumar Bari
la source
9

Votre question n'est pas du tout claire, j'en ai bien peur. Une clé n'a pas de "nom"; ce n'est pas "appelé" quoi que ce soit en ce qui concerne la carte - c'est juste une clé, et sera comparée à d'autres clés. Si vous avez beaucoup de types de clés différents, je vous suggère fortement de les mettre dans différentes cartes pour des raisons de santé mentale.

Si cela n'aide pas, veuillez clarifier la question - de préférence avec du code pour montrer ce que vous voulez dire.

Jon Skeet
la source
6

Un point important à noter ici est que si votre clé est un objet de classe définie par l'utilisateur en java, faites-en un point pour remplacer la méthode equals. Parce que la méthode HashMap.get (Object key) utilise la méthode equals pour faire correspondre la valeur de clé. Si vous ne remplacez pas la méthode equals, il essaiera de trouver la valeur simplement en fonction de la référence de la clé et non de la valeur réelle de la clé, auquel cas elle retournera toujours une valeur nulle.

Sreeja Mohan
la source
gr8 explication mam :)
eLemEnt
3

Supposons que vous ayez déclaré HashMap comme: -

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

Ensuite, la clé dans la carte est de type Type de données Caractère et valeur de type int.Maintenant, pour obtenir la valeur correspondant à la clé quel que soit le type de clé, le type de valeur, la syntaxe est: -

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

Donc, selon votre question, vous voulez obtenir une valeur de chaîne correspondant à une clé. Pour cela, déclarez simplement HashMap comme HashMap <"datatype of key", "datatype of value" hs = new HashMap <> (); L'utilisation de ceci rendra votre code plus propre et vous n'aurez pas non plus à convertir le résultat de hs.get ("mon_code") en chaîne car par défaut, il retourne la valeur de la chaîne si au moment de l'entrée on a conservé la valeur sous forme de chaîne.

Gaurav Sachdeva
la source
1

Voici un autre exemple d'utilisation des fonctions keySet (), get (), values ​​() et entrySet () pour obtenir des clés et des valeurs dans une carte:

        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());
hel
la source
0

Vous pouvez utiliser la méthode get (Object key) du HashMap. Sachez que dans de nombreux cas, votre classe de clé doit remplacer la méthode equals, pour être une classe utile pour une clé de mappage.

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

La valeur mappée à la clé 4estDD

Jabar Shahid
la source