Java 9 verbesserte Optional-Klasse

Java 9 新特性Neue Funktionen in Java 9

Die Optional-Klasse wurde in Java 8 eingeführt. Die Einführung der Optional-Klasse löst die NullPointerException effektiv. In Java 9 wurden drei Methoden hinzugefügt, um ihre Funktionalität zu verbessern:

  • stream()
  • ifPresentOrElse()
  • or()

stream()-Methode

Syntax

public Stream<T> stream()

Die Methode stream konvertiert ein Optional in einen Stream. Wenn das Optional einen Wert enthält, gibt sie einen Stream zurück, der diesen Wert enthält; andernfalls gibt sie einen leeren Stream zurück (Stream.empty()).

Beispiel

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")); //filtere die Liste, um nicht-leere Werte auszugeben //Wenn das Optional nicht leer ist, hole den Wert im Stream, andernfalls gib leer zurück List<String> filteredList = list.stream() .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) .collect(Collectors.toList()); //Die Methode Optional::stream gibt einen Stream zurück, der entweder ein //oder kein Element, wenn Daten vorhanden sind oder nicht. List<String> filteredListJava9 = list.stream() .flatMap(Optional::stream) .collect(Collectors.toList()); System.out.println(filteredList); System.out.println(filteredListJava9); } }

Das Ausführen des Ausgabeergebnisses ist:

[A, B]
[A, B]

ifPresentOrElse()-Methode

Syntax

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

Die Verbesserung der ifPresentOrElse-Methode besteht darin, dass sie ein else hat und zwei Parameter akzeptiert: Consumer und Runnable.

Der Zweck der ifPresentOrElse-Methode ist: Wenn ein Optional einen Wert enthält, wird die Funktion action auf den enthaltenen Wert angewendet, d. h. action.accept(value), was mit ifPresent übereinstimmt; Der Unterschied zur ifPresent-Methode besteht darin, dass ifPresentOrElse außerdem einen zweiten Parameter hat, emptyAction – wenn das Optional keinen Wert enthält, ruft ifPresentOrElse emptyAction auf, d. h. emptyAction.run().

Beispiel

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("Wert: " + x),() -> System.out.println("Nicht vorhanden.")); optional = Optional.empty(); optional.ifPresentOrElse( x -> System.out.println("Wert: " + x),() -> System.out.println("Nicht vorhanden.")); } }

Das Ausführen des Ausgabeergebnisses ist:

Value: 1
Not Present.

or()-Methode

Syntax

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

Wenn ein Wert vorhanden ist, geben Sie den von Optional angegebenen Wert zurück; andernfalls geben Sie einen voreingestellten Wert zurück.

Beispiel

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

Das Ausführen des Ausgabeergebnisses ist:

Value: Mahesh
Value: Not Present

Java 9 新特性Neue Funktionen in Java 9