Maison  >  Article  >  Java  >  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
Mary-Kate Olsenoriginal
2024-11-02 09:38:31721parcourir

 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() existe deux méthodes en Java qui aident à gérer Facultatif, un objet conteneur qui peut ou non contenir un value.

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>

Cas de test

Pour illustrer la différence, considérons une fonction qui renvoie un facultatif string :

<code class="java">public Optional<String> findMyPhone(int phoneId) { ... }</code>

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() ne l'exécute qu'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!

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