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
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
Beginnen wir mit der Erstellung eines benutzerdefinierten Komparators vom Typ Comparator
ComparatorbyGradeAsc = (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.
ComparatorbyGradeAscClean = 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
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.
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