findAny、findFirstは、探索した要素をOptional<T>として返す終端操作です。
| メソッド | 説明 |
|---|---|
| Optional |
ストリームのいずれかの要素を含むOptionalまたは空のOptional(ストリームが空の場合)を返す。(常に同じ要素が返される保証はない。) |
| Optional |
ストリーム最初の要素を含むOptionalまたは空のOptional(ストリームが空の場合)を返す。 |
findAnyの使い方
findAnyは、常に同じ要素が返される保証はないとされています。
なので、例えば並列処理などで処理した結果のうち、何でもよいから1個欲しい。といった場合にfindAnyを用います。
Java
IntStream.of(1, 3, 4)
.map(n -> n*2)
.parallel()
.findAny()
.ifPresent(System.out::println);
実行結果
6
findFirstの使い方
findFirstは、filterを組み合わせるとその威力を発揮します。
例えば、filterでストリーム要素の条件判定を行い、一番最初にtrue判定になった要素を取得したい場合にfindFirstを用います。
filterの使い方を忘れてしまった方は以下の記事をご確認ください!
Java
//List生成
List<Integer> list = Arrays.asList(7, 10, 12, 9, 31);
//filterのメイン処理
Predicate<Integer> p = n -> {
System.out.print("これから" + n + "を判定します。");
boolean result = n > 10;
System.out.println("判定結果は" + result + "です。");
return result;
};
//ListをStream化し、filterを実行。
list.stream()
.filter(p)
.findFirst()
.ifPresent(x -> System.out.println("findFirst()で取得した値:" + x));
実行結果
これから7を判定します。判定結果はfalseです。
これから10を判定します。判定結果はfalseです。
これから12を判定します。判定結果はtrueです。
findFirst()で取得した値:12
filterで一番最初にtrue判定となった要素「12」をfindFirstで取得することができました。

以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!
頭脳一式 
