web-dev-qa-db-fra.com

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

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

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

Jusqu'ici 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à 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;)

116
Jimmy

Il suffit d'utiliser Map#get(key) ?

Object value = map.get(myCode);

Voici un tutoriel sur les cartes que vous pourrez 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 précédemment inséré, mais si je fais un System.out.println (), je reçois quelque chose comme Java.lang.string # F0454

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

Vous voyez le résultat de Object#toString() . Mais le Java.lang.String devrait déjà en avoir un implémenté, sauf si vous avez créé une implémentation ( personnalisée avec une minuscule s dans le nom: Java.lang.string. S'il s'agit en fait d'un objet personnalisé, vous devez redéfinir Object#toString() pour obtenir une "chaîne lisible par l'homme" chaque fois que vous effectuez une 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;
}
158
BalusC

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 ce qui est rempli dans le HashMap (clé et valeur)

55
jeff porter

Si vous voulez utiliser des génériques et définir votre carte comme

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

puis chercher la valeur en tant que

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

vous ne serez pas obligé de dactylographier la map.get () ou d'appeler la méthode toString pour obtenir la valeur String

11
Shirishkumar Bari

Votre question n'est pas du tout claire, j'ai bien peur. Une clé n'a pas de "nom"; ce n'est pas "appelé" dans la mesure où la carte est concernée - c'est juste une clé, et sera comparé avec 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 ne vous aide pas, veuillez clarifier la question - de préférence avec un code pour montrer ce que vous voulez dire.

9
Jon Skeet

map.get(myCode)

6
abyx

Un point important à noter ici est que si votre clé est un objet de classe définie par l'utilisateur dans Java, indiquez-lui 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 la clé. Si vous ne substituez 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 la valeur null.

6
Sreeja Mohan

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

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

Ensuite, key in map est de type Type de données de 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 la suivante: -

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

Ainsi, selon votre question, vous souhaitez obtenir une valeur de chaîne correspondant à une clé.Pour cela, déclarez simplement HashMap en tant que HashMap <"type de données de la clé", "type de données de la valeur" hs = new HashMap <> (); Utiliser 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, la valeur de chaîne est renvoyée si, au moment de l’entrée, la valeur est conservée sous forme de chaîne.

2
Gaurav Sachdeva

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

0
raffael