リストまたはコレクションの最大/最小値を見つける
1. 前書き
Java8の強力なStream APIを使用して、特定のリスト/コレクションから最小/最大値を見つける方法の簡単な紹介。
2. 整数のリストで最大値を見つける
java.util.Streamインターフェースを介して提供されるmax()メソッドを使用できます。 メソッド参照を受け入れます。
@Test
public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() {
// given
List listOfIntegers = Arrays.asList(1, 2, 3, 4, 56, 7, 89, 10);
Integer expectedResult = 89;
// then
Integer max = listOfIntegers
.stream()
.mapToInt(v -> v)
.max().orElseThrow(NoSuchElementException::new);
assertEquals("Should be 89", expectedResult, max);
}
コードを詳しく見てみましょう。
-
リストのstream()メソッドを呼び出して、リストから値のストリームを取得します
-
ストリームでmapToInt(value → value)を呼び出して、整数ストリームを取得します
-
ストリームでmax()メソッドを呼び出して、最大値を取得します
-
max()から値を受信しない場合に、orElseThrow()を呼び出して例外をスローする
3. カスタムオブジェクトで最小値を見つける
カスタムオブジェクトの最小/最大を見つけるために、優先ソートロジックのラムダ式を提供することもできます。
まず、カスタムPOJOを定義しましょう。
class Person {
String name;
Integer age;
// standard constructors, getters and setters
}
最小年齢のPersonオブジェクトを見つけたい:
@Test
public void whenListIsOfPersonObjectThenMinCanBeDoneUsingCustomComparatorThroughLambda() {
// given
Person alex = new Person("Alex", 23);
Person john = new Person("John", 40);
Person peter = new Person("Peter", 32);
List people = Arrays.asList(alex, john, peter);
// then
Person minByAge = people
.stream()
.min(Comparator.comparing(Person::getAge))
.orElseThrow(NoSuchElementException::new);
assertEquals("Should be Alex", alex, minByAge);
}
このロジックを見てみましょう。
-
リストのstream()メソッドを呼び出して、リストから値のストリームを取得します
-
ストリームでmin()メソッドを呼び出して、最小値を取得します。 ラムダ関数をコンパレータとして渡します。これは、最小値を決定するためのソートロジックを決定するために使用されます
-
min()から値が受信されない場合に、orElseThrow()を呼び出して例外をスローします
4. 結論
この簡単な記事では、Java 8のStream APIのmax()メソッドとmin()メソッドをfind the maximum and minimum value from a List/Collection.に使用する方法について説明しました。
いつものように、コードはover on Githubで利用できます。