Categories: Java

【Java入門】StreamAPI allMatch、anyMatch、noneMatchの使い方

allMatchanyMacthnoneMatchは、Predicateオブジェクトを引数に取り、boolean値を返す終端操作です。

メソッド 説明
boolean allMatch(Predicate<? super T>p) ストリーム内のすべての要素が条件を満たす場合、Trueを返す。
boolean anyMatch(Predicate<? super T>p) ストリーム内のいずれかの要素が条件を満たす場合、Trueを返す。
boolean noneMatch(Predicate<? super T>p) ストリーム内のすべての要素が条件を満たさない場合、Trueを返す。

allMatchの使い方

2で割り切れる要素がtrueとなる条件で実行してみます。

Java

IntPredicate p = i -> {
    System.out.print("これから" + i + "を判定します。");
    boolean result = (i%2 == 0);
    System.out.println("判定結果は" + result + "です。");
    return result;
};

boolean result = IntStream.of(2,4,6).allMatch(p);
System.out.println("最終結果は" + result + "です。");

実行結果

これから2を判定します。判定結果はtrueです。
これから4を判定します。判定結果はtrueです。
これから6を判定します。判定結果はtrueです。
最終結果はtrueです。

次に、2で割り切れない要素を仕込んで実行してみます。

Java

IntPredicate p = i -> {
    System.out.print("これから" + i + "を判定します。");
    boolean result = (i%2 == 0);
    System.out.println("判定結果は" + result + "です。");
    return result;
};

boolean result = IntStream.of(2,5,6).allMatch(p);
System.out.println("最終結果は" + result + "です。");

実行結果

これから2を判定します。判定結果はtrueです。
これから5を判定します。判定結果はfalseです。
最終結果はfalseです。

そうです。allMatchはすべての要素が条件を満たすときtrueとなるので、1つでもfalseになってしまった場合、後続の要素は処理されません。

anyMatchの使い方

anyMatchも同様に、2で割り切れる要素がtrueとなる条件で実行してみます。

Java

IntPredicate p = i -> {
    System.out.print("これから" + i + "を判定します。");
    boolean result = (i%2 == 0);
    System.out.println("判定結果は" + result + "です。");
    return result;
};

boolean result = IntStream.of(1,3,5,6,7,8).anyMatch(p);
System.out.println("最終結果は" + result + "です。");

実行結果

これから1を判定します。判定結果はfalseです。
これから3を判定します。判定結果はfalseです。
これから5を判定します。判定結果はfalseです。
これから6を判定します。判定結果はtrueです。
最終結果はtrueです。

そうです。anyMatchは要素が1つでも条件を満たせばtrueとなるので、trueになった時点で後続の要素は処理されません。
次に、2で割り切れない要素のみで実行してみます。

Java

IntPredicate p = i -> {
    System.out.print("これから" + i + "を判定します。");
    boolean result = (i%2 == 0);
    System.out.println("判定結果は" + result + "です。");
    return result;
};

boolean result = IntStream.of(1,3,5,7).anyMatch(p);
System.out.println("最終結果は" + result + "です。");

実行結果

これから1を判定します。判定結果はfalseです。
これから3を判定します。判定結果はfalseです。
これから5を判定します。判定結果はfalseです。
これから7を判定します。判定結果はfalseです。
最終結果はfalseです。

上記のように、条件に一致する要素が1つも無い場合、falseとなります。

noneMatchの使い方

noneMatchも同様に、2で割り切れる要素がtrueとなる条件で実行してみます。

Java

IntPredicate p = i -> {
    System.out.print("これから" + i + "を判定します。");
    boolean result = (i%2 == 0);
    System.out.println("判定結果は" + result + "です。");
    return result;
};

boolean result = IntStream.of(1,3,5,7).noneMatch(p);
System.out.println("最終結果は" + result + "です。");

実行結果

これから1を判定します。判定結果はfalseです。
これから3を判定します。判定結果はfalseです。
これから5を判定します。判定結果はfalseです。
これから7を判定します。判定結果はfalseです。
最終結果はtrueです。

abyMatchのときとは逆の結果になりました。noneMatchではすべての要素が条件に一致しない場合、trueとなります。
次に、2で割り切れる要素を仕込んで実行してみます。

Java

IntPredicate p = i -> {
    System.out.print("これから" + i + "を判定します。");
    boolean result = (i%2 == 0);
    System.out.println("判定結果は" + result + "です。");
    return result;
};

boolean result = IntStream.of(1,3,6,7,8,9).noneMatch(p);
System.out.println("最終結果は" + result + "です。");

実行結果

これから1を判定します。判定結果はfalseです。
これから3を判定します。判定結果はfalseです。
これから6を判定します。判定結果はtrueです。
最終結果はfalseです。

1つでも条件を満たす要素が存在した時点で後続の要素は処理されません。


以上で記事の解説はお終い!

もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!

issiki_wp