„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie berechnet man Maximum und Minimum in Java mithilfe von Streams?

Wie berechnet man Maximum und Minimum in Java mithilfe von Streams?

Veröffentlicht am 18.11.2024
Durchsuche:544

¿Cómo calcular el máximo y mínimo en Java usando Streams?

In diesem Beitrag erfahren Sie, wie Sie mit der Java Streams API das Maximum und Minimum einer Sammlung von Elementen berechnen. Dazu verwenden wir die Methoden max() und min() der Stream-Klasse. Mit diesen Methoden können wir mithilfe eines benutzerdefinierten Komparators das Maximum bzw. Minimum einer Sammlung von Elementen ermitteln.

Angenommen, wir haben eine Liste vom Typ List, wobei Exam ein Datensatz mit den beiden Eigenschaften Name und Note ist und wir die Prüfung mit der höchsten und der niedrigsten Note erhalten möchten.

public record Exam(String name, Double grade) { }
var exams = Arrays.asList(
        new Exam("Alice", 9.5),
        new Exam("Bob", 6.0),
        new Exam("Charlie", 7.5),
        new Exam("David", 8.0),
        new Exam("Eve", 8.5)
);

In neueren Java-Versionen können Sie zu diesem Zweck die Methoden max() und min() der Stream-Klasse verwenden, indem Sie einen benutzerdefinierten Komparator übergeben und ein Optional mit dem Ergebnis erhalten. Falls die Java-Version die Methoden max() und min() nicht unterstützt, kann die Methode Collect() verwendet werden, indem ein Collector als Parameter übergeben wird, entweder Collectors.maxBy() oder Collectors.minBy(), und wiederum ein personalisierter Komparator. Wenn Sie diese letzte Option in einer neueren Java-Version verwenden, schlägt die IDE selbst vor, sie in die Methode max() oder min() zu ändern.

Beginnen wir mit der Erstellung eines benutzerdefinierten Komparators vom Typ Comparator, der es uns ermöglicht, die Noten in aufsteigender Reihenfolge zu erhalten.

Comparator byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());

Dieser Komparator gibt beispielsweise eine negative Zahl zurück, wenn die Note der ersten Prüfung niedriger als die der zweiten ist, null, wenn sie gleich sind, und eine positive Zahl, wenn die Note der ersten Prüfung höher ist als die der zweiten Zweitens können Sie für weitere Informationen diesen Link zu einem Beitrag konsultieren, der erklärt, wie die Comparator-Schnittstelle funktioniert.

Dieser Komparator kann auf andere Weise definiert werden, indem die Methode „VergleichDouble()“ der Klasse „Comparator“ verwendet wird, die es uns ermöglicht, einen Komparator aus einer Funktion zu erstellen, die einen Double-Wert aus einem Objekt extrahiert, ohne den Komparator manuell schreiben zu müssen.

Comparator byGradeAscClean = Comparator.comparingDouble(Exam::grade);

In dieser Definition wird dem Komparator mitgeteilt, dass er ein Objekt vom Typ Exam nehmen, den Wert der Eigenschaft grade extrahieren und die Werte mithilfe eines Double-Datentyps vergleichen muss.

Diese beiden Möglichkeiten sind gleichwertig und können austauschbar verwendet werden. Die zweite Möglichkeit ist zunächst vielleicht etwas schwieriger zu verstehen, aber sobald Sie sie verstanden haben, ist sie einfacher zu schreiben und zu lesen.

Da Sie nun den Komparator haben, müssen Sie ihn nur noch in den Methoden max() und min() verwenden, um die Prüfung mit der höchsten bzw. niedrigsten Punktzahl zu erhalten.

var highestGrade = exams.stream().max(byGradeAscClean);
var lowestGrade = exams.stream().min(byGradeAscClean);

In diesem Fall wird eine optionale mit der Prüfung mit der höchsten bzw. niedrigsten Punktzahl erreicht. Falls die Prüfungsliste leer ist, wird ein Optional.empty() zurückgegeben. Um den Wert von Optional zu erhalten, können Sie die Methode ifPresent() verwenden, die einen Consumer empfängt und den Code ausführt, der als Argument übergeben wird, wenn ein Wert vorhanden ist.

highestGrade.ifPresent(ex -> System.out.println("Highest grade: "   ex.name()   " "   ex.grade()));
lowestGrade.ifPresent(ex -> System.out.println("Lowest grade: "   ex.name()   " "   ex.grade()));

// Output
Highest grade: Alice 9.5
Lowest grade: Bob 6.0

Oder übergeben Sie einfach eine Referenzmethode als Argument, um den Wert von Optional zu drucken. Wenn Optional leer ist, wird nichts gedruckt, andernfalls wird der Wert von Optional durch Aufrufen der toString()-Methode des Exam-Objekts gedruckt .

highestGrade.ifPresent(System.out::println);
lowestGrade.ifPresent(System.out::println);

// Output
Exam[name=Alice, grade=9.5]
Exam[name=Bob, grade=6.0]

Auf diese Weise können Sie mithilfe der Java Streams API und der Comparator-Schnittstelle das Maximum und Minimum einer Sammlung von Elementen erhalten.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/asjordi/como-calcular-el-maximo-y-minimo-en-java-usando-streams-2fca?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3