English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Java

Contrôle de flux Java

Java Tableau

Java Orienté Objet (I)

Java Orienté Objet (II)

Java Orienté Objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (file d'attente)

Java Map

Java Set

Java Entrée/Sortie (I/O)

Reader Java/Writer

Autres sujets Java

Java 9 Classe Optional améliorée

Java 9 New features

La classe Optional dans Java 8 a été introduite, la classe Optional résout bien les exceptions de pointeur nul dans java 9 dans laquelle ont été ajoutés trois méthodes pour améliorer ses fonctionnalités :

  • stream()

  • ifPresentOrElse()

  • ou()

La méthode stream()

Grammaire

public Stream<T> stream()

La méthode stream() a pour objectif de convertir Optional en Stream, si l'Optional contient une valeur, alors il retourne un Stream contenant cette valeur, sinon il retourne un Stream vide (Stream.empty()).

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class Tester {
public static void main(String[] args) {
   List<Optional<String>> list = Arrays.asList (
      Optional.empty(), 
      Optional.of("A"), 
      Optional.empty(), 
      Optional.of("B"));
 
      //filter the list based to print non-empty values
  
      //if optional is non-empty, get the value in stream, otherwise return empty
      List<String> filteredList = list.stream()
         .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
         .collect(Collectors.toList());
 
      //La méthode Optional::stream retournera un flux d'un ou l'autre 
      //ou zéro élément si les données sont présentes ou non.
      List<String> filteredListJava9 = list.stream()
         .flatMap(Optional::stream)
         .collect(Collectors.toList());
 
      System.out.println(filteredList);
      System.out.println(filteredListJava9);
   }  
}

The execution output result is:

[A, B]
[A, B]

Méthode ifPresentOrElse()

Grammaire

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)

L'amélioration de la méthode ifPresentOrElse est l'ajout de else, acceptant deux paramètres Consumer et Runnable.

L'utilisation de la méthode ifPresentOrElse consiste à appeler la fonction action sur la valeur contenue dans l'Optional, c'est-à-dire action.accept(value), ce qui est conforme à ifPresent; la différence avec la méthode ifPresent est que ifPresentOrElse a un second paramètre emptyAction - si l'Optional ne contient pas de valeur, then ifPresentOrElse appelle emptyAction, c'est-à-dire emptyAction.run().

Exemple en ligne

import java.util.Optional;
 
public class Tester {
   public static void main(String[] args) {
      Optional<Integer> optional = Optional.of(1);
 
      optional.ifPresentOrElse( x -> System.out.println("Value: ") + x),() -> 
         System.out.println("Non Présent."));
 
      optional = Optional.empty();
 
      optional.ifPresentOrElse( x -> System.out.println("Value: ") + x),() -> 
         System.out.println("Non Présent."));
   }  
}

The execution output result is:

Valeur: 1
Non Présent.

Méthode or()

Grammaire

public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)

Si la valeur existe, retourne l'Optional spécifié, sinon retourne une valeur prédéfinie.

import java.util.Optional;
import java.util.function.Supplier;
 
public class Tester {
   public static void main(String[] args) {
      Optional<String> optional1 = Optional.of("Sea");
      Supplier<Optional<String>> supplierString = () -> Optional.of("Not Present");
      optional1 = optional1.or( supplierString);
      optional1.ifPresent( x -> System.out.println("Value: ") + x));
      optional1 = Optional.empty();    
      optional1 = optional1.or( supplierString);
      optional1.ifPresent( x -> System.out.println("Value: ") + x));  
   }  
}

The execution output result is:

Value: Sea
Value: Not Present

Java 9 New features