Max/Min einer Liste oder Sammlung suchen

Finden von Max / Min einer Liste oder Sammlung

1. Einführung

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

2. Finden Sie Max in einer Liste von Ganzzahlen

Wir können die Methodemax()verwenden, die über die Schnittstellejava.util.Streambereitgestellt 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. Rufen Sie die Methodestream()in der Liste auf, um einen Wertestrom aus der Liste abzurufen

  2. Aufruf vonmapToInt(value → value) im Stream, um einen Integer-Stream zu erhalten

  3. Aufruf der Methodemax()im Stream, um den Maximalwert zu erhalten

  4. Aufruf vonorElseThrow(), um eine Ausnahme auszulösen, wenn vonmax() kein Wert empfangen wird

3. Finden Sie Min mit benutzerdefinierten Objekten

Um das Minimum / Maximum 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 wollen dasPerson-Objekt 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. Rufen Sie die Methodestream()in der Liste auf, um einen Wertestrom aus der Liste abzurufen

  2. Aufrufen der Methodemin() im Stream, um den Mindestwert zu erhalten. Wir übergeben als Komparator eine Lambda-Funktion, mit der die Sortierlogik für die Bestimmung des Minimalwertes festgelegt wird

  3. Aufruf vonorElseThrow(), um eine Ausnahme auszulösen, wenn von min() kein Wert empfangen wird

4. Fazit

In diesem kurzen Artikel haben wir untersucht, wie die Methodenmax() undmin()aus derStream-API von Java 8 fürfind the maximum and minimum value from a List/Collection.verwendet werden können

Wie immer ist der Codeover on Github verfügbar.