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!