Table des matières
Préface
1 Créez un objet facultatif
String value = optional.orElse("default");
Copier après la connexion
" >
String value = optional.orElse("default");
Copier après la connexion
Si la valeur de l'objet facultatif est vide, l'exception spécifiée est levée.
Si la valeur de l'objet facultatif est vide, un objet facultatif vide est renvoyé.
If Facultatif Si la valeur de l'objet ne répond pas aux conditions de filtrage spécifiées, un objet Facultatif vide est renvoyé.
La méthode or() est similaire à orElse() et orElseGet(), qui fournissent toutes deux des situations alternatives lorsque l'objet est vide. La valeur de retour de or() est un autre objet facultatif produit par le paramètre Fournisseur.
Par conséquent, ma suggestion est que si vous ne savez pas si vous devez utiliser Facultatif, ne l'utilisez pas encore.
Maison Java javaDidacticiel Quelles sont les méthodes facultatives couramment utilisées en Java ?

Quelles sont les méthodes facultatives couramment utilisées en Java ?

May 09, 2023 am 11:34 AM
java optional

Préface

Facultatif en Java est un objet conteneur, qui peut contenir une valeur non nulle ou être vide. Son objectif principal est d'éviter les exceptions de pointeur nul lors de l'écriture de code.

L'utilisation complète de Facultatif dans Java 8 est la suivante :

1 Créez un objet facultatif

Vous pouvez créer un objet contenant des non-. valeurs nulles via la méthode of() Objet facultatif, par exemple :

Optional<String> optional = Optional.of("value");
Copier après la connexion

Vous pouvez également créer un objet facultatif contenant une valeur éventuellement nulle via la méthode ofNullable(), par exemple : #🎜🎜 #

Optional<String> optional = Optional.ofNullable(null);
Copier après la connexion

2. Obtenez l'objet facultatif La valeur de

Vous pouvez obtenir la valeur non nulle dans l'objet facultatif via la méthode get(), par exemple :

String value = optional.get();
Copier après la connexion

Si la valeur de l'objet facultatif est nulle, appelez la méthode get(). NoSuchElementException sera levée. Par conséquent, avant d'appeler la méthode get(), il est préférable d'utiliser la méthode isPresent() pour déterminer si l'objet Optionnel contient une valeur non nulle.

3. Déterminez si l'objet facultatif contient une valeur non nulle

Vous pouvez utiliser la méthode isPresent() pour déterminer si l'objet facultatif contient une valeur non nulle, par exemple :

if (optional.isPresent()) {
    // Optional对象包含非空值
} else {
    // Optional对象为空
}
Copier après la connexion
# 🎜🎜#Vous pouvez également utiliser la méthode ifPresent() pour effectuer certaines opérations lorsque l'objet facultatif contient des valeurs non nulles, par exemple :

optional.ifPresent(value -> System.out.println(value));
Copier après la connexion

4. la valeur ou la valeur par défaut dans l'objet facultatif

#🎜 🎜#Vous pouvez utiliser la méthode orElse() pour obtenir la valeur ou la valeur par défaut dans l'objet facultatif, par exemple :

String value = optional.orElse("default");
Copier après la connexion

If la valeur dans l'objet facultatif est vide, la valeur par défaut spécifiée est renvoyée.

5. Obtenez la valeur dans l'objet facultatif ou lancez une exception

Vous pouvez utiliser la méthode orElseThrow() pour obtenir la valeur dans l'objet facultatif ou lancer une exception, par exemple : #🎜🎜 #
String value = optional.orElseThrow(() -> new RuntimeException("value is null"));
Copier après la connexion

Si la valeur de l'objet facultatif est vide, l'exception spécifiée est levée.

6. Convertissez la valeur de l'objet facultatif

Vous pouvez utiliser la méthode map() pour convertir la valeur de l'objet facultatif en un autre type de valeur, par exemple :

Optional<Integer> optional = Optional.of("123").map(Integer::parseInt);
Copier après la connexion

Si la valeur de l'objet facultatif est vide, un objet facultatif vide est renvoyé.

7. Filtrez la valeur dans l'objet facultatif

Vous pouvez utiliser la méthode filter() pour filtrer la valeur dans l'objet facultatif, par exemple :

Optional<String> optional = Optional.of("value").filter(value -> value.startsWith("v"));
Copier après la connexion

If Facultatif Si la valeur de l'objet ne répond pas aux conditions de filtrage spécifiées, un objet Facultatif vide est renvoyé.

Améliorations de Java 9

Nous avons introduit les fonctionnalités de Java 8. Java 9 ajoute trois méthodes à la classe facultative : or(), ifPresentOrElse() et stream().

La méthode or() est similaire à orElse() et orElseGet(), qui fournissent toutes deux des situations alternatives lorsque l'objet est vide. La valeur de retour de or() est un autre objet facultatif produit par le paramètre Fournisseur.

Si l'objet contient une valeur, l'expression Lambda ne sera pas exécutée :

@Test
public void whenEmptyOptional_thenGetValueFromOr() {
    User result = Optional.ofNullable(user)
      .or( () -> Optional.of(new User("default","1234"))).get();

    assertEquals(result.getEmail(), "default");
}
Copier après la connexion

Dans l'exemple ci-dessus, si la variable utilisateur est nulle, elle renverra un facultatif, qui contient un objet utilisateur dont l'e-mail est "par défaut". La méthode

ifPresentOrElse() nécessite deux paramètres : un Consumer et un Runnable. Si l'objet contient une valeur, l'action du Consommateur sera exécutée, sinon le Runnable sera exécuté.

Si vous souhaitez effectuer une action lorsqu'il y a une valeur, ou simplement savoir si une certaine valeur est définie, alors cette méthode est très utile :

Optional.ofNullable(user).ifPresentOrElse( u -> logger.info("User is:" + u.getEmail()),
  () -> logger.info("User not found"));
Copier après la connexion

Supplément : facultatif controverse Cliquez sur

En fait, il y a encore beaucoup de controverses dans l'industrie sur la question de savoir si Optionnel doit être utilisé. D'une part, Optionnel peut forcer les développeurs à gérer des valeurs nulles, mais d'autre part. , Facultatif est très facile à abuser, en particulier Certains développeurs appellent directement la méthode get() ou ifPresent() après avoir obtenu le Facultatif, ce qui ne résout pratiquement aucun problème et augmente la charge de codage.

Par conséquent, ma suggestion est que si vous ne savez pas si vous devez utiliser Facultatif, ne l'utilisez pas encore.

Voici quelques scénarios de référence pour l'utilisation de Facultatif, comme suit :

Facultatif est généralement utilisé pour renvoyer des valeurs

Facultatif est principalement utilisé pour renvoyer une valeur, son utilisation n'est pas recommandée dans les variables membres ou les paramètres de méthode.

  1. Optional lui-même ne juge pas nul

    N'attribuez jamais null à Facultatif et ne jugez pas si Facultatif lui-même est nul En effet, Facultatif est conçu pour résoudre. null Oui, cela n’aurait aucun sens d’introduire à nouveau null. Cela devrait devenir le consensus de l’industrie.

  2. Les collections n'utilisent pas Facultatif

    Étant donné que les collections ont de meilleures méthodes de traitement telles que Collections.emptyList(), il n'est pas nécessaire d'utiliser Facultatif.

  3. Traitement fonctionnel des valeurs

    Comme vous pouvez le voir dans l'introduction à l'utilisation ci-dessus, Facultatif fournit de nombreuses méthodes de traitement fonctionnel lambda, telles que le filtre, la carte, etc. , ceux-ci sont plus recommandés lors de l'utilisation de Facultatif, car Facultatif peut vous aider à gérer automatiquement les situations de valeurs nulles et à éviter les exceptions NPE.

  4. Acquisition d'attributs multicouches

    J'ai déjà mentionné cet exemple de code Je pense que c'est le scénario dans lequel les avantages de l'utilisation d'Optional sont les plus évidents.

  5. Ne pas renvoyer null est mieux que de renvoyer Facultatif

    Retourner Facultatif à l'appelant forcera l'appelant à gérer la situation nulle, ce qui ajoutera une certaine charge de codage à l'appelant, fonctionne particulièrement avec une grande réutilisabilité.
  6. Mais si l'appelant ne s'attend pas à obtenir null dans la plupart des cas, il doit implémenter une méthode qui renvoie une valeur ou une exception, comme suit :

  7. /**
     * 查询订单,要么返回订单,要么异常
     */
    public Order getOrderByIdOrExcept(Long orderId){
        Order order = orderMapper.getOrderById(orderId);
        if(order == null){
            throw new BizException("根据单号" + orderId + "未查询到订单!");
        }
        return order;
    }
     
    /**
     * 查询订单,值可能为null
     */
    public Optional<Order> getOrderById(Long orderId){
        Order order = orderMapper.getOrderById(orderId);
        return Optional.ofNullable(order);
    }
    Copier après la connexion
    # 🎜 🎜#Étant donné que le code de traitement ultérieur repose sur les données de commande, les données de commande ne peuvent pas être obtenues et le code ne peut pas descendre. Par conséquent, dans la plupart des cas, il est préférable d'utiliser la méthode getOrderByIdOrExcept, qui évite le NPE et augmente la charge de codage. !

    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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles