J'ai une Map
à convertir en ConcurrentMap
Map<String,Object> testMap = new HashMap<String,Object>(); testMap.put("test", null); testMap.put("test2","123"); testMap.put("test3",234); Map<String,Object> concMap = new HashMap<>(testMap);
Je reçois une exception de pointeur nul. Si je copie dans un nouveau HashMap
Map<String,Object> testMap = new HashMap<String,Object>(); testMap.put("test", null); //This null causing issues in conversion testMap.put("test2","123"); testMap.put("test3",234); ConcurrentMap<String,Object> concMap = new ConcurrentHashMap<>(testMap);
je n'obtiens aucune erreur. Existe-t-il un moyen sûr de passer d'une Map
à une ConcurrentMap
sans NullPointerException
3 Réponses :
Il se trouve dans la documentation pour ConcurrentHashMap
:
Comme Hashtable mais contrairement à HashMap, cette classe ne permet pas l'utilisation de null comme clé ou valeur.
Comme pour les autres ConcurrentMaps, le seul autre implémentation ConcurrentSkipListMap
, n'autorise pas non plus la valeur null .
Veuillez ne pas modifier d'autres réponses pour inclure votre réponse dans la leur, merci.
@Zabuza a accidentellement modifié le vôtre, annulez-le déjà au cas où vous ne l'auriez pas remarqué. Il n'y avait pas vraiment de bonne raison "d'inclure ma réponse dans la vôtre" puisque votre réponse était déjà la même.
Le problème ne concerne pas la conversion d'un HashMap
en ConcurrentHashMap
. Il s'agit davantage de ConcurrentHashMap
étant de sécurité null, il n'autorise pas les valeurs null
. Depuis sa documentation : p>
Comme
Hashtable
mais contrairement àHashMap
, cette classe ne permet pas d'utilisernull
comme clé ou valeur.
Si vous regardez dans le code source de ConcurrentHashMap que vous verrez, il n'autorise pas la clé ou la valeur nulle -
java.util.concurrent.ConcurrentHashMap#putVal /** Implementation for put and putIfAbsent */ final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) throw new NullPointerException();
La question était de savoir s'il existe un moyen sûr de convertir une carte en ConcurrentMap, donc je ne vois pas pourquoi cela a été fermé et un doublon
Vous pouvez utiliser
Optional.empty ()
pour les valeurs nulles si vous souhaitez convertir en ConcurrentMap