Maison >Java >javaDidacticiel >Pourquoi Collectors.toMap lève-t-il une exception NullPointerException lors de la gestion des valeurs d'entrée nulles ?

Pourquoi Collectors.toMap lève-t-il une exception NullPointerException lors de la gestion des valeurs d'entrée nulles ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-11 06:10:03420parcourir

Why Does Collectors.toMap Throw a NullPointerException When Handling Null Entry Values?

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

Introduction

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.

Énoncé du problème

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.

Cause

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.

Solution Java 8

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.

Conclusion

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!

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