3
votes

Erreur lors de la conversion d'une carte en ConcurrentMap en Java

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


2 commentaires

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


3 Réponses :


2
votes

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 .


2 commentaires

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.



0
votes

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 :

Comme Hashtable mais contrairement à HashMap , cette classe ne permet pas d'utiliser null comme clé ou valeur.


0 commentaires

2
votes

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();


0 commentaires