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:
-
Rufen Sie die Methodestream()in der Liste auf, um einen Wertestrom aus der Liste abzurufen
-
Aufruf vonmapToInt(value → value) im Stream, um einen Integer-Stream zu erhalten
-
Aufruf der Methodemax()im Stream, um den Maximalwert zu erhalten
-
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:
-
Rufen Sie die Methodestream()in der Liste auf, um einen Wertestrom aus der Liste abzurufen
-
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
-
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.