1前書き

Java8の強力な

Stream

APIを使用して、指定されたリスト/コレクションから最小値/最大値を見つける方法の簡単な紹介。


2整数のリストでMaxを探す


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()

    メソッドを呼び出して、値のストリームを取得します.

リスト
。 Integerを取得するためにストリーム上で

mapToInt(value – > value)

を呼び出す

ストリーム
。最大値を取得するためにストリーム上で

max()

メソッドを呼び出す

  1. 値が受信されない場合に

    orElseThrow()

    を呼び出して例外をスローする


max()

より


3カスタムオブジェクトでMinを探す

カスタムオブジェクトの最小値/最大値を見つけるために、好みのソートロジックにラムダ式を指定することもできます。

まずカスタム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()

    メソッドを呼び出して、値のストリームを取得します.

リスト
。最小値を取得するためにストリーム上で

min()

メソッドを呼び出します。私たちです

比較関数としてラムダ関数を渡すと、これは
最小値を決定するためのソートロジック
。値が受信されない場合に

orElseThrow()

を呼び出して例外をスローする

min

__()

__より


4結論

このクイック記事では、Java 8の

Stream

APIの

max()

メソッドと

min()

メソッドを使用して、__List/Collectionから最大値と最小値を見つける方法について説明しました。

いつものように、コードはhttps://github.com/eugenp/tutorials/tree/master/core-java-collections[over on Github]から入手できます。