Max / Min einer Liste oder Sammlung finden

1. Einleitung

Eine kurze Einführung, wie Sie den Min / Max-Wert aus einer bestimmten Liste / Sammlung mit der leistungsstarken Stream- API in Java8 ermitteln.

2. Suchen Sie Max in einer Liste von Ganzzahlen

Wir können die Methode max () verwenden, die über die Schnittstelle java.util.Stream bereitgestellt wird. Es akzeptiert eine Methodenreferenz:

@Test public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() { // given List listOfIntegers = Arrays.asList(1, 2, 3, 4, 56, 7, 89, 10); Integer expectedResult = 89; // then Integer max = listOfIntegers .stream() .mapToInt(v -> v) .max().orElseThrow(NoSuchElementException::new); assertEquals("Should be 89", expectedResult, max); }

Schauen wir uns den Code genauer an:

  1. Aufrufen der stream () -Methode in der Liste, um einen Wertestream aus der Liste abzurufen
  2. Aufruf von mapToInt (Wert -> Wert) im Stream, um einen Integer-Stream abzurufen
  3. Aufruf der Methode max () im Stream, um den Maximalwert zu erhalten
  4. Aufruf von orElseThrow (), um eine Ausnahme auszulösen, wenn von max () kein Wert empfangen wird.

3. Finden Sie Min mit benutzerdefinierten Objekten

Um das Min / Max für benutzerdefinierte Objekte zu ermitteln, können wir auch einen Lambda-Ausdruck für unsere bevorzugte Sortierlogik bereitstellen.

Definieren wir zunächst das benutzerdefinierte POJO:

class Person { String name; Integer age; // standard constructors, getters and setters }

Wir möchten das Personenobjekt mit dem Mindestalter finden:

@Test public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() { // given Person alex = new Person("Alex", 23); Person john = new Person("John", 40); Person peter = new Person("Peter", 32); List people = Arrays.asList(alex, john, peter); // then Person minByAge = people .stream() .min(Comparator.comparing(Person::getAge)) .orElseThrow(NoSuchElementException::new); assertEquals("Should be Alex", alex, minByAge); }

Schauen wir uns diese Logik an:

  1. Aufrufen der stream () -Methode in der Liste, um einen Wertestream aus der Liste abzurufen
  2. Aufruf der Methode min () im Stream, um den Mindestwert zu erhalten. Wir übergeben eine Lambda-Funktion als Komparator. Dies wird verwendet, um die Sortierlogik für die Bestimmung des Minimalwerts zu bestimmen
  3. Aufruf von orElseThrow (), um eine Ausnahme auszulösen, wenn von min () kein Wert empfangen wird.

4. Fazit

In diesem kurzen Artikel haben wir untersucht, wie die Methoden max () und min () aus der Stream- API von Java 8 verwendet werden können, um den maximalen und minimalen Wert aus einer Liste / Sammlung zu ermitteln.

Wie immer ist der Code auf Github verfügbar.