Maison > Java > javaDidacticiel > le corps du texte

Pourquoi Collectors.toMap lance-t-il une exception NullPointerException avec des valeurs d'entrée nulles ?

Linda Hamilton
Libérer: 2024-11-11 21:44:03
original
393 Les gens l'ont consulté

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

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

Introduction

Dans Java 8 , Collectors.toMap est une méthode pratique pour créer une carte à partir d'un flux de paires clé-valeur. Cependant, cette méthode renvoie une NullPointerException si l'une des valeurs du flux est nulle. Cela semble étrange, étant donné que les cartes peuvent contenir des valeurs nulles sans aucun problème.

Raison de l'exception nulle

La raison derrière ce comportement est l'implémentation par défaut des collecteurs. toMap utilise un HashMap comme structure de données sous-jacente. Les HashMaps n'autorisent pas les valeurs nulles pour les clés, mais ils autorisent les valeurs nulles pour les valeurs. Cependant, lorsque Collectors.toMap rencontre une valeur nulle pour une clé, il tente d'utiliser la valeur par défaut pour la valeur (qui est nulle), ce qui entraîne l'exception NullPointerException.

Solution Java 8

Pour résoudre ce problème dans Java 8, nous pouvons utiliser une solution de contournement qui consiste à créer manuellement un HashMap et à le remplir avec les paires clé-valeur du stream:

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

Cette solution de contournement n'est pas particulièrement élégante, mais elle produira le résultat attendu : une carte contenant les paires clé-valeur du flux, avec des valeurs nulles pour toutes les clés qui avaient des valeurs nulles dans le stream.

Considérations

Il est important de noter que cette solution de contournement a les éléments suivants considérations :

  • Contrairement à Collectors.toMap, il remplacera silencieusement les valeurs si vous avez la même clé plusieurs fois.
  • Il utilise un HashMap comme structure de données sous-jacente, qui peut ne pas être adapté à tous les scénarios.

Si ces considérations sont inacceptables pour votre cas d'utilisation, vous devrez peut-être envisager des approches alternatives, telles que l'utilisation une implémentation différente du Collector ou un retour à une ancienne boucle for.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal