Maison >Java >javaDidacticiel >Pourquoi « Comparator.reversed() » échoue-t-il avec les expressions Lambda dans le tri Java ?

Pourquoi « Comparator.reversed() » échoue-t-il avec les expressions Lambda dans le tri Java ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-03 21:38:12489parcourir

Why Does `Comparator.reversed()` Fail with Lambda Expressions in Java Sorting?

Pourquoi Comparator.reversed() échoue avec Lambdas

Lors du tri d'une liste d'objets utilisateur à l'aide de Comparator.comparing avec une expression lambda, un une erreur peut se produire :

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error

Cela est dû à une limitation dans le mécanisme d'inférence de type du compilateur. Le compilateur a du mal à déterminer le type de l'argument lambda 'u'.

Dans l'exemple suivant, l'utilisation d'une référence de méthode permet au compilateur de déduire le type cible et d'éviter l'erreur :

userList.sort(Comparator.comparing(User::getName).reversed()); // works

La référence de la méthode fournit des informations de type supplémentaires, que le compilateur utilise pour déduire le type de 'u' en tant qu'utilisateur.

Pour éviter l'erreur lors de l'utilisation d'un lambda, vous pouvez spécifier explicitement le type de l'argument lambda :

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());

Dans les futures versions du compilateur, ce problème pourrait être résolu et l'erreur pourrait ne plus se produire.

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