読者です 読者をやめる 読者になる 読者になる

Java8のStream APIの使い方(終端操作編② - min, max, findFirst, findAny, count)

スポンサーリンク

Stream API 終端操作のうちmin max findFirst findAny countについてまとめました。

min:最小値を返す

min メソッドは最小値を返すメソッドで、比較を行う関数型インターフェースのComparator<T>を引数にとります。戻り値はOptional<T>であるため、値を取り出すにはgetorElseメソッドを使用します。空ストリームの場合はOptional.empty()を返します。

List<Integer> list = Arrays.asList(200, 100, 300);
Optional<Integer> s = list.stream().min(Comparator.naturalOrder());
System.out.println(s.get());

// 実行結果
100

max:最大値を返す

max メソッドは最大値を返すメソッドで、比較を行う関数型インターフェースのComparator<T>を引数にとります。戻り値はOptional<T>であるため、値を取り出すにはgetorElseメソッドを使用します。空ストリームの場合はOptional.empty()を返します。

List<Integer> list = Arrays.asList(200, 100, 300);
Optional<Integer> s = list.stream().max(Comparator.naturalOrder());
System.out.println(s.get());

// 実行結果
300

findFirst:先頭の値を返す

findFirst メソッドは Stream 内の先頭の要素を返します。findFirst は順序が関係するので、ストリームが検出順序を持たない場合は任意の要素が返されます。戻り値はOptional<T>で、空ストリームの場合はOptional.empty()を返します。

List<Integer> list = Arrays.asList(200, 100, 300);
Optional<Integer> s = list.stream().findFirst();
System.out.println(s.get());

// 実行結果
200

findAny:任意の値を返す

findAny メソッドは Stream 内の任意の要素を返します。findFirst と違って同じストリームに対して呼び出すたびに、違う結果が返される可能性があります。戻り値はOptional<T>で、空ストリームの場合はOptional.empty()を返します。

List<Integer> list = Arrays.asList(200, 100, 300);
Optional<Integer> s = list.stream().findAny();
System.out.println(s.get());

// 実行結果
200

count:要素数を返す

count メソッドは Stream の要素数を返します。戻り値はlong型です。List#sizeと違って要素数を求める場合は Stream の最後の要素までループが実行されるため、同じ感覚で使用しないほうがいいです。

List<Integer> list = Arrays.asList(200, 100, 300);
long s = list.stream().count();
System.out.println(s);

// 実行結果
3

空ストリームかどうかを判定する際にif (stream.count() != 0)とするような場合は、if (stream.findAny().isPresent())とする方が効率がいいみたいです。

関連記事

 Java8のOptionalの使い方 - TASK NOTES

 Java8のforEachを使った繰り返し処理について - TASK NOTES

 Java8ラムダ式の使い方の基本 - TASK NOTES

 Java8のStream APIの使い方(Streamの生成編)

 Java8のStream APIの使い方(中間操作編① - filter, map)

 Java8のStream APIの使い方(中間操作編② - flatMap, distinct, limit, skip)

 Java8のStream APIの使い方(中間操作編③ - sorted, peek)

 Java8のStream APIの使い方(終端操作編① - anyMatch, allMatch, noneMatch) - TASK NOTES