JavaでStreamsを使用して最大値と最小値を計算するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-08 19:03:02
オリジナル
586 人が閲覧しました

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

この投稿では、Java Streams API を使用して要素のコレクションの最大値と最小値を計算する方法を説明します。これを行うには、Stream クラスの max() メソッドと min() メソッドを使用します。これらのメソッドを使用すると、カスタム コンパレーターを使用して、要素のコレクションの最大値と最小値をそれぞれ取得できます。

List タイプのリストがあるとします。ここで、Exam は 2 つのプロパティ名とグレードを含むレコードであり、最高グレードと最低グレードの試験を取得したいと考えています。

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() メソッドを使用して、Collectors.maxBy() または Collectors.minBy() のいずれかのパラメータとして Collector を渡すことができます。パーソナライズされたコンパレータ。 Java の最新バージョンでこの最後のオプションを使用すると、IDE 自体がそれを max() または min() メソッドに変更することを提案します。

まず、Comparator タイプのカスタム コンパレータを作成しましょう。これにより、昇順で成績を取得できます。

Comparator<Exam> byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
ログイン後にコピー
ログイン後にコピー

例として、このコンパレーターは、最初の試験の成績が 2 回目の試験の成績より小さい場合は負の数を返し、それらが等しい場合は 0 を返し、最初の試験の成績が 2 回目の試験の成績より大きい場合は正の数を返します。 2 つ目は、詳細については、Comparator インターフェイスの仕組みを説明した投稿へのリンクを参照してください。

このコンパレータは、Comparator クラスの CompareDouble() メソッドを使用する別の方法で定義できます。これにより、コンパレータを手動で記述することなく、オブジェクトから double 値を抽出する関数からコンパレータを作成できます。

Comparator<Exam> byGradeAscClean = Comparator.comparingDouble(Exam::grade);
ログイン後にコピー

この定義では、コンパレーターは、Exam 型のオブジェクトを受け取り、grade プロパティの値を抽出し、Double データ型を使用して値を比較する必要があることが指示されています。

これら 2 つの方法は同等であり、同じ意味で使用できます。2 番目の方法は、最初は理解するのが少し難しいかもしれませんが、一度理解すると、書くのも読むのも簡単になります。

これでコンパレータが完成しました。あとはそれを max() メソッドと min() メソッドで使用して、それぞれ最高点と最低点の試験を取得するだけです。

public record Exam(String name, Double grade) { }
ログイン後にコピー
ログイン後にコピー

この場合、オプションの<試験> を受けます。それぞれ最高点と最低点の試験で。検査リストが空の場合は、Optional.empty() が返されます。 Optional の値を取得するには、Consumer を受け取り、値が存在する場合は引数として渡されたコードを実行する ifPresent() メソッドを使用できます。

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)
);
ログイン後にコピー
ログイン後にコピー

または、単に参照メソッドを引数として渡してオプションの値を出力します。オプションが空の場合は何も出力されません。それ以外の場合は、Exam オブジェクトの toString() メソッドを呼び出すことによってオプションの値が出力されます。 .

Comparator<Exam> byGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
ログイン後にコピー
ログイン後にコピー

このようにして、Java Streams API と Comparator インターフェイスを使用して要素のコレクションの最大値と最小値を取得できます。

以上がJavaでStreamsを使用して最大値と最小値を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート