Maison >Java >javaDidacticiel >Quand utiliser `Optional.orElseGet()` plutôt que `Optional.orElse()` ?

Quand utiliser `Optional.orElseGet()` plutôt que `Optional.orElse()` ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 00:32:03240parcourir

 When to Use `Optional.orElseGet()` Over `Optional.orElse()`?

Différence entre Optionnel.orElse() et Optionnel.orElseGet()

La classe Optionnelle en Java fournit des méthodes pratiques pour gérer et renvoyer des valeurs qui peuvent ou non être présent. Deux méthodes importantes dans cette classe sont orElse() et orElseGet(). La principale différence entre ces méthodes réside dans le moment où la valeur de secours ou le calcul est invoqué.

orElse()

La méthode orElse() prend une valeur par défaut comme argument et renvoie celle-ci. valeur si l’instance facultative est vide. Il n'attend pas que isPresent() soit évalué, mais évalue et renvoie immédiatement la valeur de secours fournie, même si l'instance facultative n'est pas vide.

orElseGet()

En revanche, le La méthode orElseGet() prend une interface Fournisseur comme argument, vous permettant de définir un calcul qui s'exécute uniquement lorsque l'instance facultative est vide. Cette approche est plus efficace lorsque la valeur de repli est coûteuse à calculer et ne doit être effectuée que lorsque cela est nécessaire.

Quand utiliser orElseGet() plutôt que orElse()

Envisagez d'utiliser orElseGet() au lieu de orElse() dans les scénarios suivants :

  • Optimisation des performances : orElseGet() garantit que le calcul de secours n'est effectué qu'en cas de besoin, améliorant ainsi les performances si le calcul de secours est gourmand en ressources .
  • Gestion des exceptions : Si le calcul de secours peut lever une exception, orElseGet() vous permet de l'encapsuler de manière plus contrôlée, évitant ainsi la levée d'exceptions inattendues.
  • Lisibilité du code : l'utilisation de orElseGet() avec un fournisseur descriptif peut améliorer la lisibilité du code en indiquant quand le calcul de secours est en cours d'exécution.

Exemple d'utilisation

Considérez l'exemple suivant :

<code class="java">Optional<String> optional = Optional.ofNullable("Hello");

// Always computes the fallback value.
String result1 = optional.orElse("World");

// Computes the fallback value only if the optional is empty.
String result2 = optional.orElseGet(() -> {
   // Expensive computation here
   return "World";
});</code>

Dans cet exemple, result1 contiendra toujours "World" car la valeur de secours est évaluée quelle que soit l'option présente. En revanche, result2 ne se verra attribuer "Monde" que si l'option est vide, permettant de meilleures performances lorsque le calcul est coûteux.

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