allMatch
、anyMacth
、noneMatch
は、Predicate
オブジェクトを引数に取り、boolean値を返す終端操作です。
メソッド | 説明 |
---|---|
boolean allMatch(Predicate<? super T>p) | ストリーム内のすべての要素が条件を満たす場合、Trueを返す。 |
boolean anyMatch(Predicate<? super T>p) | ストリーム内のいずれかの要素が条件を満たす場合、Trueを返す。 |
boolean noneMatch(Predicate<? super T>p) | ストリーム内のすべての要素が条件を満たさない場合、Trueを返す。 |
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
も同様に、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も同様に、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がオススメ!同僚に差をつけよう!