Facultatif ouElse Facultatif

Optionnel ou optionnel

1. introduction

Dans certains cas, nous pourrions vouloir revenir à une autre instanceOptional si une autre est vide.

Dans ce didacticiel, nous allons brièvement mentionner comment nous pouvons faire cela, ce qui est plus difficile qu'il n'y paraît.

Pour une introduction à la classe facultative Java, jetez un œil à nosprevious article.

2. Utilisation de Java brut

Dans Java 8, il n’existe pas de moyen direct de renvoyer unOptional différent si le premier est vide.

Par conséquent, nous pouvons implémenter notre propre méthode personnalisée:

public static  Optional or(Optional optional, Optional fallback) {
    return optional.isPresent() ? optional : fallback;
}

Et en pratique:

@Test
public void givenOptional_whenValue_thenOptionalGeneralMethod() {
    String name = "Filan Fisteku";
    String missingOptional = "Name not provided";
    Optional optionalString = Optional.ofNullable(name);
    Optional fallbackOptionalString = Optional.ofNullable(missingOptional);

    assertEquals(
      optionalString,
      Optionals.or(optionalString, fallbackOptionalString));
}

@Test
public void givenEmptyOptional_whenValue_thenOptionalGeneralMethod() {
    Optional optionalString = Optional.empty();
    Optional fallbackOptionalString = Optional.ofNullable("Name not provided");

    assertEquals(
      fallbackOptionalString,
      Optionals.or(optionalString, fallbackOptionalString));
}

D'autre part,Java 9 does add an or() method that we can use to get an Optional, or another value, if that Optional isn’t present.

Voyons cela en pratique avec un exemple rapide:

public static Optional getName(Optional name) {
    return name.or(() -> getCustomMessage());
}

Nous avons utilisé une méthode auxiliaire pour nous aider avec notre exemple:

private static Optional getCustomMessage() {
    return Optional.of("Name not provided");
}

Nous pouvons le tester et mieux comprendre son fonctionnement. Le cas de test suivant est une démonstration du cas oùOptional has une valeur:

@Test
public void givenOptional_whenValue_thenOptional() {
    String name = "Filan Fisteku";
    Optional optionalString = Optional.ofNullable(name);
    assertEquals(optionalString, Optionals.getName(optionalString));
}

3. Utilisation de goyave

Une autre façon de faire est d’utiliser la méthodeor() de la classeOptional de la goyave. Tout d'abord, nous devons ajouterguava in notre projet (la dernière version peut être trouvéehere):


    com.google.guava
    guava
    24.1.1-jre

Maintenant, nous pouvons continuer avec le même exemple que nous avions précédemment:

public static com.google.common.base.Optional getOptionalGuavaName(com.google.common.base.Optional name) {
    return name.or(getCustomMessageGuava());
}
private static com.google.common.base.Optional getCustomMessageGuava() {
    return com.google.common.base.Optional.of("Name not provided");
}

Comme nous pouvons le voir, il est très similaire à celui affiché ci-dessus. Cependant, il a une légère différence dans la dénomination de la méthode et est exactement le même queor() method de la classeOptional du JDK 9.

Nous pouvons maintenant le tester, comme dans l'exemple ci-dessus:

@Test
public void givenGuavaOptional_whenInvoke_thenOptional() {
    String name = "Filan Fisteku";
    Optional stringOptional = Optional.of(name);

    assertEquals(name, Optionals.getOptionalGuavaName(stringOptional));
}
@Test
public void givenGuavaOptional_whenNull_thenDefaultText() {
    assertEquals(
      com.google.common.base.Optional.of("Name not provided"),
      Optionals.getOptionalGuavaName(com.google.common.base.Optional.fromNullable(null)));
}

4. Conclusion

Il s'agissait d'un article rapide illustrant comment atteindre la fonctionnalitéOptional orElse Optional.

Le code de tous les exemples expliqués ici, et bien plus encore, peut être trouvéover on GitHub.