首頁 > Java > java教程 > Java中如何使用Streams計算最大值和最小值?

Java中如何使用Streams計算最大值和最小值?

Mary-Kate Olsen
發布: 2024-11-08 19:03:02
原創
613 人瀏覽過

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

在這篇文章中,我們將了解如何使用 Java Streams API 來計算元素集合的最大值和最小值。為此,我們將使用 Stream 類別的 max() 和 min() 方法。這些方法允許我們使用自訂比較器分別取得元素集合的最大值和最小值。

假設我們有 List 類型的清單其中 Exam 是包含 name 和 Grade 兩個屬性的記錄,我們希望獲得最高等級和最低等級的考試。

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)
);
登入後複製
登入後複製

在 Java 的最新版本中,您可以透過傳遞自訂比較器並取得Optional來使用 Stream 類別的 max() 和 min() 方法來實現此目的。與結果。如果Java版本不支援max()和min()方法,則可以使用collect()方法傳遞Collector作為參數,Collectors.maxBy()或Collectors.minBy(),然後依序傳遞一個Collectors.maxBy()或Collectors. minBy(),個人化比較器。如果您在最新版本的 Java 中使用最後一個選項,IDE 本身會建議將其變更為 max() 或 min() 方法。

讓我們先建立一個 Comparator 類型的自訂比較器這使我們能夠按升序獲得成績。

Comparator<Exam> byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
登入後複製
登入後複製

舉個例子,如果第一次考試的成績小於第二次考試的成績,則該比較器將返回負數;如果相等,則返回零;如果第一次考試的成績大於第二次考試的成績,則該比較器將返回正數第二個,有關更多信息,您可以查閱此鏈接,該鏈接指向解釋比較器界面如何工作的帖子。

可以使用 Comparator 類別的 ComparisonDouble() 方法以另一種方式定義該比較器,該方法允許我們從從物件中提取 double 值的函數建立比較器,而無需手動編寫比較器。

Comparator<Exam> byGradeAscClean = Comparator.comparingDouble(Exam::grade);
登入後複製

在此定義中,比較器被告知它必須採用 Exam 類型的對象,提取 Grade 屬性的值並使用 Double 資料類型比較這些值。

這兩種方式是等價的,可以互換使用,第二種方式一開始可能有點難理解,但是一旦你理解了它就更容易編寫和閱讀。

現在你有了比較器,剩下的就是在 max() 和 min() 方法中使用它來分別獲得最高和最低分數的考試。

public record Exam(String name, Double grade) { }
登入後複製
登入後複製

在這種情況下,您將獲得可選的分別是考試的最高分和最低分。如果考試清單為空,將返回Optional.empty()。要取得Optional的值,您可以使用ifPresent()方法,該方法接收Consumer並執行作為參數傳遞給它的程式碼(如果值存在)。

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)
);
登入後複製
登入後複製

或簡單地傳遞一個引用方法作為參數來列印Optional的值,如果Optional為空則不會列印任何內容,否則將透過呼叫Exam物件的toString()方法來列印Optional的值

Comparator<Exam> byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
登入後複製
登入後複製

透過這種方式,您可以使用 Java Streams API 和 Comparator 介面來取得元素集合的最大值和最小值。

以上是Java中如何使用Streams計算最大值和最小值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板