Maison > Java > javaDidacticiel > le corps du texte

Quand dois-je utiliser Optionnel.orElseGet() au lieu de Optionnel.orElse() en Java ?

Barbara Streisand
Libérer: 2024-10-26 09:27:30
original
667 Les gens l'ont consulté

When should I use Optional.orElseGet() instead of Optional.orElse() in Java?

Détermination de la différence entre Optionnel.orElse() et Optionnel.orElseGet()

En Java, la classe Optionnelle fournit des méthodes comme orElse( ) et orElseGet() pour gérer les valeurs potentiellement manquantes ou nulles. Comprendre leurs nuances est crucial pour une utilisation efficace.

orElse() vs. orElseGet()

  • orElse() : renvoie le value si présente, ou la valeur par défaut fournie si absent.
  • orElseGet() : renvoie la valeur si présente, ou le résultat de l'appel du fournisseur fourni s'il est absent. Le fournisseur n'est pas invoqué si la valeur est présente.

Quand utiliser orElseGet()

  • Optimisation des performances : Pensez à utiliser orElseGet() lorsque l'action à effectuer sur une valeur manquante est coûteuse en calcul, car elle évite une exécution inutile dans le scénario isPresent().

Exemple avec une fonction du monde réel

Pour illustrer la différence, considérons la fonction suivante :

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

Scénario 1 : orElse()

Quand optionnel.isPresent() == true :

  • orElse() appellera la fonction suivante de manière redondante, même si la valeur est déjà présente.

Quand optionnel.isPresent() == false :

  • orElse() appellera la fonction suivante quelle que soit sa nécessité.

Scénario 2 : orElseGet()

Quand optionnel.isPresent() == true :

  • orElseGet() n'invoquera pas le fournisseur puisque la valeur est présente.

Quand optionnel.isPresent() == false :

  • orElseGet() invoquera le fournisseur pour générer la valeur par défaut.

Exemple de code

<code class="java">public class TestOptional {
    public Optional<String> findMyPhone(int phoneId) {
        return phoneId == 10
                ? Optional.of("MyCheapPhone")
                : Optional.empty();
    }

    public String buyNewExpensivePhone() {
        System.out.println("Going to a very far store to buy a new expensive phone");
        return "NewExpensivePhone";
    }

    public static void main(String[] args) {
        // Scenario 1: orElse()
        Optional<String> phone = findMyPhone(10).orElse(buyNewExpensivePhone());
        // Scenario 2: orElseGet()
        phone = findMyPhone(-1).orElseGet(() -> buyNewExpensivePhone());
    }
}</code>
Copier après la connexion

Le le code démontre les différents comportements de orElse() et orElseGet() en fonction de la présence ou de l'absence de la valeur facultative.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!