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

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 19:03:02583Durchsuche

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

In diesem Beitrag werden wir sehen, wie man die Java Streams API verwendet, um das Maximum und Minimum einer Sammlung von Elementen zu 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 Dabei ist „Prüfung“ ein Datensatz mit zwei Eigenschaften, Name und Note, und wir möchten die Prüfung mit der höchsten und der niedrigsten Note erhalten.

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 optionales mit dem Ergebnis. 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 Dadurch können wir die Noten in aufsteigender Reihenfolge erhalten.

Comparator<Exam> 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<Exam> byGradeAscClean = Comparator.comparingDouble(Exam::grade);

In dieser Definition wird dem Komparator mitgeteilt, dass er ein Objekt vom Typ Exam nehmen, den Wert der Grade-Eigenschaft 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 es einfacher, sie 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.

public record Exam(String name, Double grade) { }

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

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)
);

Oder übergeben Sie einfach als Argument eine Referenzmethode, 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 .

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

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

Das obige ist der detaillierte Inhalt vonWie berechnet man Maximum und Minimum in Java mithilfe von Streams?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn