Elemente in einem Stream sortieren mit Stream.sorted()

Genauso wie Listen oder Arrays, möchte man auch gerne Streams sortieren. Natürlich bietet die Java 8 Stream API eine einfache Lösung.

Inhaltsverzeichnis

Stream sortieren mit Comparator als Lambda-Ausdruck

Die Methode Stream.sorted() erwartet einen Comparator. Da Comparator ein Functional Interface ist, kann statt einer Klasse auch ein Lambda-Ausdruck übergeben werden:

List persons = Arrays.asList(
        new Person("id1", "Maxi", "Meier"),
        new Person("id2", "Sarah", "Sorglos"),
        new Person("id3", "Caro", "Müller"),
        new Person("id4", "Hans", "Huber")
);

List firstNames = persons.stream()
    .sorted((p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()))
    .map(p -> p.getFirstName())
    .collect(Collectors.toList());

System.out.println(firstNames);
// Ausgabe: [Caro, Hans, Maxi, Sarah]

Die Liste von Personen wird mit der Labda-Expression (p1, p2) -> p1.getFirstName().compareTo(p2.getFirstName()) ganz einfach nach dem Vornamen sortiert.

Stream in der natürlichen Ordnung der Elemente sortieren

Wenn die Klasse selbst das interface Comparable implementiert, muss kein Comparator bzw. keine Lambda-Expression übergeben werden:

List firstNames = persons.stream()
    .sorted()
    .map(p -> p.getFirstName())
    .collect(Collectors.toList());

System.out.println(firstNames);
// Ausgabe: [Caro, Hans, Maxi, Sarah]

In diesem Fall muss die Klasse Person das Interface Comparable implementieren, das die Methode compareTo() vorgibt:

@Override
public int compareTo(@NotNull Object o) {
    return firstName.compareTo(((Person) o).getFirstName());
}

Ähnliche Artikel