Java 9 : Nouvelles méthodes pour la classe Optional
Optional (Java 8) évite les vérifications null et NullPointerException. Java 9 ajoute trois méthodes :
1. stream()
public Stream<T> stream()
Si valeur présente : stream à un élément. Sinon : stream vide. Permet d'utiliser flatMap(Optional::stream) pour aplatir une liste d'Optionals.
Exemple
List<Optional<String>> list = Arrays.asList(
Optional.empty(), Optional.of("A"), Optional.empty(), Optional.of("B"));
// Java 8 style
List<String> filtered = list.stream()
.flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
.collect(Collectors.toList());
// Java 9 style
List<String> filteredJava9 = list.stream()
.flatMap(Optional::stream)
.collect(Collectors.toList());
// Les deux produisent [A, B]
2. ifPresentOrElse(Consumer, Runnable)
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
Si valeur présente : exécute action avec la valeur. Sinon : exécute emptyAction.
Exemple
Optional<Integer> opt = Optional.of(1);
opt.ifPresentOrElse(
x -> System.out.println("Valeur: " + x),
() -> System.out.println("Absent")
); // Valeur: 1
opt = Optional.empty();
opt.ifPresentOrElse(
x -> System.out.println("Valeur: " + x),
() -> System.out.println("Absent")
); // Absent
3. or(Supplier<Optional>)
public Optional<T> or(Supplier<? extends Optional<? extends T>> supplier)
Si valeur présente : retourne l'Optional actuel. Sinon : retourne l'Optional fourni par le Supplier.
Exemple
Optional<String> opt = Optional.of("Mahesh");
Supplier<Optional<String>> supplier = () -> Optional.of("Absent");
opt = opt.or(supplier);
opt.ifPresent(x -> System.out.println("Valeur: " + x)); // Valeur: Mahesh
opt = Optional.empty().or(supplier);
opt.ifPresent(x -> System.out.println("Valeur: " + x)); // Valeur: Absent
Ces méthodes rendent Optional plus fluide pour la composition fonctionnelle et le traitement conditionnel.
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression