1. 概要

このチュートリアルは、Java8の強力なStream APIを使用して、特定のリストまたはコレクションから最小値と最大値を見つける方法の簡単な紹介です。

2. 整数のリストで最大値を見つける

メソッド参照を受け入れるjava.util.Streamインターフェースを介して提供されるmax()メソッドを使用できます。

@Test
public void whenListIsOfIntegerThenMaxCanBeDoneUsingIntegerComparator() {
    // given
    List<Integer> 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);
}

コードを詳しく見てみましょう。

  1. リストでstream()メソッドを呼び出して、リストから値のストリームを取得します
  2. ストリームでmapToInt(value-> value)を呼び出して、整数ストリームを取得します
  3. ストリームでmax()メソッドを呼び出して、最大値を取得します
  4. またはElseThrow()を呼び出して、 max()から値を受け取らなかった場合に例外をスローします。

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<Person> 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);
}

このロジックを見てみましょう。

  1. リストでstream()メソッドを呼び出して、リストから値のストリームを取得します
  2. ストリームでmin()メソッドを呼び出して、最小値を取得します。 コンパレータとしてラムダ関数を渡します。これは、最小値を決定するためのソートロジックを決定するために使用されます。
  3. min()から値を受け取らなかった場合に、 orElseThrow()を呼び出して例外をスローします。

4. 結論

このクイック記事では、Java 8 Stream APIのmax()および min()メソッドを使用してを検索する方法について説明しました。リストまたはコレクションの最大値と最小値。

いつものように、コードはGitHubから入手できます。