グアバなしでこれを行うことができます。
Collections は、コンパレータを使用するオーバーロードを含む、任意の Collection で動作するメソッドを提供min
します。max
ここでは Java 8 Comparator の静的メソッドをラムダで使用してコンパレータを簡潔に指定しますが、Java 8 より前では匿名クラスを使用できます。
Item max = Collections.max(list, Comparator.comparingInt(i -> i.price));
コレクションが空の場合、これらのメソッドは NoSuchElementException をスローします。
Java 8 ストリームは、コンパレータを使用する関数を提供min
します。max
これらの関数Optional<T>
は、空のストリームを適切に処理するために戻ります。Comparator の静的メソッドは、自然順序付けの一般的なケースを含め、コンパレータを簡潔に指定するのに役立ちます。この質問では、次を使用します
Optional<Item> max = list.stream().max(Comparator.comparingInt(i -> i.price));
これは、すべての Collection 実装やファイルなどの他のものを含む任意のストリーム ソースで機能し、ストリームをフィルタリングすることでコレクションのサブセットの最大値を簡単に計算できます。大規模なコレクションと高価なコンパレータ (たとえば、String の自然順序付け) がある場合は、並列ストリームを使用できます。
(余談: ストリーム型が Comparable を実装する場合、理想的には、Stream は引数をとらないオーバーロードを提供min
しmax
ます。残念ながら、Java は型パラメーターに基づいて条件付きでメソッドを公開することをサポートしていないため、このためだけに Stream を拡張する新しい StreamOfComparable インターフェイスを導入する価値はありません。場合。)