Maison >Java >javaDidacticiel >Pourquoi Collectors.toMap lève-t-il une exception NullPointerException lors de la gestion des valeurs d'entrée nulles ?
La méthode Collectors.toMap, un utilitaire puissant de l'API Stream de Java 8, fournit une manière concise de convertir un flux d'objets en une carte. Cependant, les utilisateurs peuvent rencontrer une NullPointerException déroutante lorsqu'ils tentent d'incorporer des valeurs nulles en tant qu'entrées de carte.
Malgré les cartes autorisant des valeurs nulles en tant qu'entrées, Collectors.toMap renvoie une NullPointerException si l'une des les valeurs du flux sont nulles. Ce comportement suscite des inquiétudes car il semble contre-intuitif et peut être source de confusion pour les développeurs.
Cette exception est provoquée par l'implémentation spécifique de Collectors.toMap, qui utilise un HashMap en interne. En raison du fonctionnement interne de HashMap, il ne peut pas gérer les valeurs nulles pour les entrées. Lorsqu'il rencontre une valeur nulle, le HashMap renvoie une NullPointerException.
Pour résoudre ce problème, une solution de contournement consiste à créer manuellement un HashMap et à le remplir avec les éléments du flux. Ceci peut être réalisé en utilisant le code suivant :
Map<Integer, Boolean> collect = list.stream() .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
Ce code simule efficacement la fonctionnalité de Collectors.toMap tout en évitant l'exception NullPointerException. Notez que cette solution peut remplacer silencieusement les valeurs si des clés en double sont présentes.
L'exception NullPointerException rencontrée avec Collectors.toMap et les valeurs nulles est un problème connu dans l'implémentation d'OpenJDK. Bien que la solution de contournement fournie permette aux développeurs de continuer à utiliser cette méthode, il est essentiel de comprendre ses limites et ses pièges potentiels.
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!