Categories: Java

【Java入門】StreamAPI finedAny、findFirstの使い方

findAnyfindFirstは、探索した要素をOptional<T>として返す終端操作です。

メソッド 説明
Optional findAny() ストリームのいずれかの要素を含むOptionalまたは空のOptional(ストリームが空の場合)を返す。(常に同じ要素が返される保証はない。)
Optional findFirst() ストリーム最初の要素を含む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がオススメ!同僚に差をつけよう!

issiki_wp