Das größte oder kleinste Element in einer Liste finden

Um das größte oder kleinste Element in einer Liste zu finden ist es nicht notwendig, eine Schleife zu programmieren und alle Elemente einzeln zu vergleichen.

Inhaltsverzeichnis

Wie so oft hilft uns hier die Utility Klasse java.util.Collections, die z.B. auch zum sortieren einer Liste verwendet wird.

Das minimale Element in einer Liste finden

Die Klasse Collections enthält zwei min()-Methoden:

  • min(Collection<? extends T> coll): Findet das kleinste Objekt der Liste. Entweder nach der sogenannten "natürlichen Ordnung". Falls der Typ von T das Interface Comparable implementiert hat, gibt dessen compareTo()-Methode die Ordnung vor.
  • min(Collection<? extends T> coll, Comparator<? super T> comp): Alternativ kann man auch einen eigenen Comparator übergeben, der entscheidet ob ein Element kleiner oder größer als ein anderes ist.

Collections.min() Beispiel

List beers = Arrays.asList("Schnaitl", "Grieskirchner",
            "eggenberg", "Neufeldner");
Collections.min(beers);  // Grieskirchner

Das Ergebnis der min() Methode wirkt etwas befremdlich, da nach dem Alphabet ja "eggenberg" das kleinste Element sein müsste. Die "natürliche Ordnung" für Strings ist die Ordnung der Unicode-Codes, laut dem die Großbuchstaben vor den Kleinbuchstaben kommen. Deshalb ist in diesem Fall "Grieskirchner" das kleinste Element.

Für solche Fälle ist die zweite min() Methode gedacht, der ein Comparator übergeben werden kann, in diesem Fall als Lambda-Ausdruck:

Collections.min(beers, 
            (a, b) -> a.toLowerCase().compareTo(b.toLowerCase())); 
// eggenberg

Die Comparator Funktion wandelt die Strings nun vor dem Vergleich in Kleinbuchstaben um, damit die richtige Reihenfolge zum tragen kommt.

Das maximale Element in einer Liste finden

Analog zu min() hat die Klasse Collections auch zwei max()-Methoden:

  • max(Collection<? extends T> coll): Findet das größte Objekt der Liste. Entweder nach der sogenannten "natürlichen Ordnung". Falls der Typ von T das Interface Comparable implementiert hat, gibt dessen compareTo()-Methode die Ordnung vor.
  • max(Collection<? extends T> coll, Comparator<? super T> comp): Alternativ kann man auch einen eigenen Comparator übergeben, der entscheidet ob ein Element kleiner oder größer als ein anderes ist.

Collections.max() Beispiel

List beers = Arrays.asList("Schnaitl", "Grieskirchner",
            "eggenberg", "Neufeldner");
Collections.max(beers);  // eggenberg

Das Ergebnis der min() Methode wirkt falsch, da nach dem Alphabet ja "Schnaitl" das größte Element sein müsste. Die "natürliche Ordnung" für Strings ist die Ordnung der Unicode-Codes, laut dem die Großbuchstaben vor den Kleinbuchstaben kommen. Deshalb ist in diesem Fall "eggenberg" das größte Element.

Für solche Fälle ist die zweite max() Methode gedacht, der ein Comparator übergeben werden kann, in diesem Fall als Lambda-Ausdruck:

Collections.max(beers, 
            (a, b) -> a.toLowerCase().compareTo(b.toLowerCase())); 
// Schnaitl

Die Comparator Funktion wandelt die Strings nun vor dem Vergleich in Kleinbuchstaben um, damit die richtige Reihenfolge zum tragen kommt.


Ähnliche Artikel