Die Klasse Optional

  • Container der einen nicht-null Wert enthalten oder nicht enthalten kann
  • Wenn ein Wert enthalten ist liefert isPresent() true und get() (bzw. getAsInt(), getAsLong(), …) liefern die Werte
public final class Optional<T>
public final class OptionalInt
public final class OptionalLong
public final class OptionalDouble

Methoden

public boolean isEmpty()
// gegenteil:
public boolean isPresent()
 
// If a value is present, performs the given action with the value, otherwise does nothing.
public void ifPresent(Consumer<T> action)
 
// If a value is present, returns the value, otherwise returns other.
public T orElse (T other)
 
// If a value is present, returns an Optional<U> as a result of applying the given mapping function to
the value, otherwise returns an empty Optional.
public <U> Optional<U> map (Function<T,U> mapper)

Erzeugung

// Int Streams
IntStream.of(47, 55, 11);    // 47, 55, 11
IntStream.range(5, 10);      // 5, 6, ..., 9
 
// Infinite Streams
IntStream.iterate(3, x -> x*x).limit(4);  // 3, 9, 81, 6561
 
// Double Streams
DoubleStream.of(1./2, 1./3, 1./4);        // 0.5, 0.33, 0.25
IntStream.range(5, 10).asDoubleStream();  // 5.0, 6.0, ...
 
// String and Char Streams
"Java".chars();  // IntStream (!), wird zu ASCII-Werten
"Zeile 1\nZeile 2".lines();  // "Zeile 1", "Zeile 2"
 
// Random Streams
new Random().ints(); // Unendlich langer Stream von RandInts
new Random().ints(2); // Anzahl
new Random().ints(2, 1000, 2000); // Anzahl, von, bis
new Random().doubles(2); // [0 .. 1)
new Random().doubles(2, 1000, 2000);
 
// Array Streams
int [] prim = {2, 3, 5, 7, 11}
Arrays.stream(prim); // IntStream
 
double[] fracs = {1./2, 1./3, 1./4}
Arrays.stream(fracs); // DoubleStream
 
String[] namen = {"Tim", "Clara", "Paul"};
Arrays.stream(namen); // Stream<String>
 
// Array Streams for non-primitives
Stream.of(namen);     // Stream<String>
 
// Collections
List<String> namen = List.of("Tim", "Tom", "Paula");
namen.stream();          // Tim, Tom, Paula
namen.parallelStream();  // Tim, Paula, Tom
 
// Directories and Files
Files.walk(Path.of("."))
Files.lines(Path.of("Kafka.txt"), ISO_8859_1) // Per Zeile

Operationen

filter // filtert alle Elemente heraus, die das übergebene Predicate nicht erfüllen
map // transformiert alle Elemente durch Anwendung einer Function
flatMap // bildet einen verschachtelten Stream auf einen "flachen" Stream ab
peek // führt für jedes Element die übergebene Aktion aus
distinct // entfernt doppelt vorkommende Elemente
sorted // sortiert die Elemente
limit // setzt eine Obergrenze für die Anzahl der Elemente
skip // überspringt die ersten Elemente

Endoperationen

allMatch // prüft, ob alle Elemente das übergebene Predicate erfüllen
anyMatch // prüft, ob mindestens ein Element das übergebene Predicate erfüllt
noneMatch // prüft, ob keines der Elemente das übergebene Predicate erfüllt
count // liefert die Anzahl der Elemente
min // liefert das kleinste Element
max // liefert das größte Element
reduce // "reduziert" den gesamten Stream auf einen einzigen Wert
findFirst // liefert das erste Element
findAny // liefert ein beliebiges Element
forEach // führt für jedes Element die übergebene Aktion aus
toArray // erzeugt aus den Stream-Elementen ein Array
collect // erzeugt aus den Stream-Elementen eine Collection