この投稿では、Java Streams API を使用して要素のコレクションの最大値と最小値を計算する方法を説明します。これを行うには、Stream クラスの max() メソッドと min() メソッドを使用します。これらのメソッドを使用すると、カスタム コンパレーターを使用して、要素のコレクションの最大値と最小値をそれぞれ取得できます。
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) );
最近のバージョンの Java では、カスタム コンパレータを渡して Optional
まず、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 サイトの他の関連記事を参照してください。