Maison  >  Article  >  Java  >  Pourquoi Collectors.toMap() lève-t-il une NullPointerException avec des valeurs d'entrée nulles ?

Pourquoi Collectors.toMap() lève-t-il une NullPointerException avec des valeurs d'entrée nulles ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-11 11:46:03599parcourir

Why does Collectors.toMap() throw a NullPointerException with null entry values?

NullPointerException dans Collectors.toMap() avec des valeurs d'entrée nulles

Lorsque vous tentez d'utiliser Collectors.toMap() pour transformer un flux d'objets en carte, une NullPointerException peut survenir si une ou plusieurs des valeurs du flux sont nulles. Ce comportement peut sembler contre-intuitif, étant donné que les cartes sont capables de contenir des valeurs nulles.

Cette exception se produit en raison d'un bug connu dans OpenJDK. Pour atténuer ce problème, une solution de contournement est disponible :

Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);

Bien qu'elle ne soit pas élégante, cette approche résout efficacement le problème. La carte résultante contiendra les paires clé-valeur du flux, y compris toutes les valeurs nulles.

Notez que cette solution de contournement a une limitation : si le flux contient des clés en double avec des valeurs différentes, la carte remplacera silencieusement la clé existante. valeur avec le nouveau. Pour résoudre ce problème, reportez-vous au lien fourni dans la section commentaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn