web-dev-qa-db-fra.com

HashMaps et les valeurs Null?

Comment passez-vous des valeurs NULL dans un HashMap?
L'extrait de code suivant fonctionne avec les options renseignées:

HashMap<String, String> options = new HashMap<String, String>();  
options.put("name", "value");
Person person = sample.searchPerson(options);  
System.out.println(Person.getResult().get(o).get(Id));    

La question est donc de savoir ce qui doit être entré dans les options et/ou la méthode pour passer une valeur nulle?
J'ai essayé le code suivant sans succès:

options.put(null, null);  
Person person = sample.searchPerson(null);    

options.put(" ", " ");  
Person person = sample.searchPerson(null);    

options.put("name", " ");  
Person person = sample.searchPerson(null);  

options.put();  
Person person = sample.searchPerson();    
50
Neutron_boy

HashMap supporte les deux clés et valeurs null

http://docs.Oracle.com/javase/6/docs/api/Java/util/HashMap.html

... et autorise les valeurs NULL et la clé NULL

Votre problème n'est donc probablement pas la carte elle-même.

102
kenor

Vous pouvez noter les possibilités ci-dessous:

1. Les valeurs entrées dans une carte peuvent être null.

Cependant, avec plusieurs null clés et valeurs, il ne prendra qu'un null paire clé-valeur une fois.

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

codes.put(null, null);
codes.put(null,null);
codes.put("C1", "Acathan");

for(String key:codes.keySet()){
    System.out.println(key);
    System.out.println(codes.get(key));
}

la sortie sera:

null //key  of the 1st entry
null //value of 1st entry
C1
Acathan

2. votre code n'exécutera null qu'une fois

options.put(null, null);  
Person person = sample.searchPerson(null);   

Cela dépend de l'implémentation de votre méthode searchPerson si vous voulez que plusieurs valeurs soient null, vous pouvez les implémenter en conséquence.

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

    codes.put(null, null);
    codes.put("X1",null);
    codes.put("C1", "Acathan");
    codes.put("S1",null);


    for(String key:codes.keySet()){
        System.out.println(key);
        System.out.println(codes.get(key));
    }

sortie:

null
null

X1
null
S1
null
C1
Acathan
9
Shuchi Jain

Il semble que vous essayez d'appeler une méthode avec un paramètre Map. Donc, pour appeler avec un nom de personne vide la bonne approche doit être

HashMap<String, String> options = new HashMap<String, String>();
options.put("name", null);  
Person person = sample.searchPerson(options);

Ou tu peux le faire comme ça

HashMap<String, String> options = new HashMap<String, String>();
Person person = sample.searchPerson(options);

En utilisant

Person person = sample.searchPerson(null);

Pourrait vous obtenir une exception de pointeur null. Tout dépend de l'implémentation de la méthode searchPerson ().

3
Ashwin Aditya

C’est une bonne pratique de programmation pour éviter d’avoir null valeurs dans une carte .

Si vous avez une entrée avec la valeur null, il n’est pas possible de dire si une entrée est présente dans la carte ou à laquelle une valeur null est associée.

Vous pouvez soit définir une constante pour de tels cas (Exemple: String NOT_VALID = "#NA"), ou vous pouvez avoir une autre collection qui stocke des clés qui ont null valeurs.

Veuillez vérifier ceci lien pour plus de détails.

1
Pritesh Mhatre