Maison > Java > javaDidacticiel > Quand dois-je utiliser Optionnel.orElseGet() Au lieu de Optionnel.orElse() ?

Quand dois-je utiliser Optionnel.orElseGet() Au lieu de Optionnel.orElse() ?

Mary-Kate Olsen
Libérer: 2024-11-02 09:38:31
original
854 Les gens l'ont consulté

 When Should I Use Optional.orElseGet() Instead of Optional.orElse()?

Comprendre la différence entre Optionnel.orElse() et Optionnel.orElseGet()

Optional.orElse() et Optionnel.orElseGet() sont deux méthodes en Java qui aident à gérer Facultatif, un objet conteneur qui peut ou non contenir une valeur.

Description de orElse()

orElse() prend une valeur (autre) comme argument. Si l'Optionnel est présent (contient une valeur), il renvoie cette valeur. Cependant, si l'Optionnel est vide, il renvoie la valeur fournie (autre).

Description de orElseGet()

orElseGet() prend également un argument, mais celui-ci il s'agit parfois d'une interface fonctionnelle fournisseur. Un fournisseur ne prend aucun argument et renvoie une valeur. Contrairement à orElse(), orElseGet() n'invoquera la fonction Fournisseur que lorsque l'option Facultative est vide.

Quand utiliser orElseGet() ?

La principale différence entre orElse () et orElseGet() correspondent aux cas où l'argument fourni entraînerait une opération coûteuse. Si l'Optionnel n'est pas vide, l'utilisation de orElse() effectuera toujours l'opération fournie même si elle est inutile. Cependant, orElseGet() évite cette opération inutile, en ne l'exécutant qu'en cas de besoin.

Exemple

Considérons l'exemple suivant :

<code class="java">Optional<String> myString = Optional.empty();

String result1 = myString.orElse(ExpensiveOperation.getExpensiveString()); // ExpensiveOperation always executed
String result2 = myString.orElseGet(() -> ExpensiveOperation.getExpensiveString()); // ExpensiveOperation only executed if Optional is empty</code>
Copier après la connexion

Cas de test

Pour illustrer la différence, considérons une fonction qui renvoie une chaîne facultative :

<code class="java">public Optional<String> findMyPhone(int phoneId) { ... }</code>
Copier après la connexion

Scénario 1 : orElse()

Optional.isPresent() Used phone
True (redundant call) NewExpensivePhone
False NewExpensivePhone

Scénario 2 : orElseGet()

Optional.isPresent() Used phone
True MyCheapPhone
False NewExpensivePhone

Comme on le voit dans le scénario de test, orElse() exécute toujours la fonction fournie, tandis que orElseGet() n'exécute que en cas de besoin.

Conclusion

Comprendre la différence entre orElse() et orElseGet() est crucial lorsque l'on travaille avec des options. orElseGet() fournit un moyen efficace de gérer les valeurs facultatives en évitant les opérations inutiles lorsque l'option est présente.

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